2009-03-09 11 views
14

मैं वर्तमान में अपने लैन के आसपास भेजने के लिए वस्तुओं को क्रमबद्ध और deserialize करने के लिए बाइनरी फॉर्मेटर (Remoting) का उपयोग कर रहा हूँ।सबसे तेज़ धारावाहिक और deserializer सी # में सबसे कम स्मृति पदचिह्न के साथ?

मैंने हाल ही में 2.0 से .NET 3.5 तक अपग्रेड किया है। क्या 3.5 ने धारावाहिक प्रदर्शन में सुधार करने के लिए किसी भी नए प्रकार की शुरुआत की है?

मैंने DataContractSerializer पर देखा है, लेकिन यह XML अंतर्निहित अंतर्निहित करने के लिए कुछ भी क्रमबद्ध करता है ... जो स्मृति पदचिह्न को बढ़ाएगा।

मेरे LAN में ऑब्जेक्ट भेजने के लिए सबसे तेज़ धारावाहिक क्या है? मुझे इंटरऑप या वर्जनिंग की परवाह नहीं है ...। मुझे गति चाहिए!

मैं तीसरे पक्ष के ओपन सोर्स विकल्प के लिए खुला हूं।

+0

ऐसा लगता है कि यहां दो प्रश्न हैं ... सबसे तेज़ क्रमबद्धता एक है, दूसरा सबसे कम ज्ञापन पदचिह्न के साथ क्रमबद्धता है। –

+0

@ मॉरीसियो: यह हमेशा संतुलन का मामला है। आप आमतौर पर दो गुणों के बीच इष्टतम खोजते हैं, इसलिए आप दोनों एक ही समय पर विचार करते हैं। –

+0

संभावित डुप्लिकेट [.NET ऑब्जेक्ट को क्रमबद्ध करने और deserialize करने के लिए सबसे तेज़ तरीका] (http://stackoverflow.com/questions/4143421/fastest-way-to-serialize-and-deserialize-net-object) – nawfal

उत्तर

8

ऐसा लगता है कि Protocol Buffers ऐसा हो सकता है जो आप खोज रहे हैं।

तीन .NET कार्यान्वयन हैं जिन्हें मैं जानता हूं: protobuf-net, protobuf-csharp-port और Proto#

performance comparisons दिखाता है कि प्रोटोकॉल बफर आकार और क्रमिकरण/deserialization गति दोनों के मामले में अंतर्निहित धारावाहिकों से बेहतर प्रदर्शन करते हैं।

+6

इनके बीच क्या अंतर है तीन .NET कार्यान्वयन? –

+1

@StefanSteinegger वे विभिन्न डेवलपर्स द्वारा प्रोटोबफ के विभिन्न कार्यान्वयन हैं।अब स्थिति के लिए: प्रोटो # गायब हो गया प्रतीत होता है, प्रोटोबफ-नेट और प्रोटोबफ-सीशारप-पोर्ट दोनों उत्कृष्ट डेवलपर्स द्वारा कार्यान्वित किए गए हैं। सही लिंक https://github.com/mgravell/protobuf-net और https://github.com/jskeet/protobuf-csharp-port हैं। – atlaste

2

0Lमें @Luke द्वारा लिंक किया गया है, ध्यान दें कि DataContractJsonSerializer अन्य एमएस धारावाहिकों की तुलना में बहुत अच्छी तरह से प्रदर्शन करता है।

जेएसओएन की सर्वव्यापीता को देखते हुए, और जिसकी आप DataContractJsonSerializer का उपयोग कर सकते हैं, मुझे "प्रोटोकॉल बफर" का उपयोग करने के लिए बहुत अधिक कारण नहीं दिख रहा है। भाषा और प्लेटफार्मों के बीच बाउंसिंग करते समय जेएसओएन डीबग करना आसान होगा, और यह खूबसूरती से संपीड़ित होगा।

(मैं प्यार करता हूँ कि किस तरह Google CS 101 अवधारणाओं लेता है और उन्हें लागू करने के लिए प्रसिद्ध हो जाता है। सी में, हम "प्रोटोकॉल बफ़र" "struct" रों। वे महान काम कहते हैं।)

+0

सी structs (या मेरे मामले में सी ++) बहुत अच्छा होगा, लेकिन .NET (ओपी द्वारा आवश्यक) और जावा केवल संरचना के डेटा को क्रमबद्ध नहीं करते हैं, वे एक बिंदु पर structs परिभाषा को क्रमबद्ध भी करते हैं। साथ ही, प्रोटोकॉल बफर _ "बैकवर्ड-संगतता को तोड़ने के बिना आपके संदेश स्वरूपों में नए फ़ील्ड जोड़ने की अनुमति देता है;" _ [डेवलपर मार्गदर्शिका देखें] (https://developers.google.com/protocol-buffers/docs/overview)। – Trisped

5

मैं कुछ benchmarks for the leading .NET serializers उपलब्ध आधारित पर नॉर्थविंड डेटासेट।

@marcgravell द्विआधारी Protobuf शुद्ध सबसे तेजी से कार्यान्वयन बेंचमार्क है कि माइक्रोसॉफ्ट सबसे तेजी से उपलब्ध serializer बीसीएल में (एक्सएमएल DataContractSerializer) की तुलना में के बारे में 7x तेज है।

माइक्रोसॉफ्ट के JsonDataContractSerializer बहुत धीमी है - से अधिक 9x धीमी है कि Protobuf शुद्ध और मेरे अपने JsonSerializer की तुलना में धीमी अधिक 3.6x

+0

साइमन हेविट की पुस्तकालय के बारे में क्या? * देखें [.NET - भाग 2 में ऑप्टिमाइज़िंग सीरियलाइजेशन] (http://www.codeproject.com/dotnet/OptimizingSerialization2.asp) * या * [.NET में बड़ी वस्तुओं को क्रमबद्ध करने के लिए कैसे?] (Http: // stackoverflow। com/प्रश्न/709,399/कैसे करने वाली serialize-बड़े वस्तुओं में नेट OutOfMemory-अपवाद/1,290,530 # 1,290,530) *। –

0

जैसा कि मैंने this answer में प्रदर्शित किया है, जेनरेट कोड सबसे तेज़ धारावाहिक हो सकता है। हालांकि यह शुरुआती चरण में है और अभी भी कुछ विशेषताओं की कमी है जो अन्य धारावाहिकों की पेशकश करते हैं।

संबंधित मुद्दे