2011-01-13 13 views
5

में बाइनरी सीरियलाइजेशन/डी-सीरियलाइजेशन मैं एक वितरित एप्लिकेशन पर काम कर रहा हूं जिसमें दो घटक हैं। एक मानक सी ++ में लिखा गया है (प्रबंधित सी ++ और लिनक्स प्लेटफॉर्म पर चल रहा है) और दूसरा सी # में लिखा गया है। दोनों एक संदेश बस के माध्यम से संचार कर रहे हैं।सी ++ और सी #

मैं एक स्थिति है जिसमें मैं सी # आवेदन करने के लिए C++ से वस्तुओं उत्तीर्ण करने की आवश्यकता है और इस के लिए मैं सी में उन वस्तुओं ++ क्रमानुसार करने और (.NET में प्रमुखता/बिना marshaling की तरह कुछ) सी # में उन्हें डी-क्रमानुसार की जरूरत है । मुझे बाइनरी में इस धारावाहिकता को निष्पादित करने की आवश्यकता है, न कि एक्सएमएल में (प्रदर्शन कारणों से)।

मैं Boost.Serialization का इस्तेमाल किया है यह करने के लिए जब दोनों सिरों सी में लागू किया गया ++, लेकिन अब है कि मैं एक छोर पर एक .NET अनुप्रयोग है, Boost.Serialization एक व्यवहार्य समाधान नहीं है।

मैं ऐसे समाधान की तलाश में हूं जो मुझे सी ++ और .NET सीमा i.e., क्रॉस प्लेटफ़ॉर्म बाइनरी क्रमबद्धता पर (डी) क्रमबद्ध करने की अनुमति देता है।

मुझे पता है कि मैं एक सी ++ डीएल में (डी) क्रमबद्धता कोड लागू कर सकता हूं और .NET अनुप्रयोग में P/Invoke का उपयोग कर सकता हूं, लेकिन मैं इसे अंतिम उपाय के रूप में रखना चाहता हूं।

इसके अलावा, मैं जानना चाहता हूं कि मैं कुछ मानक जैसे gzip का उपयोग करता हूं, क्या यह कुशल होगा? क्या gzip के लिए कोई अन्य विकल्प हैं? उनमें से पेशेवर/विपक्ष क्या हैं?

धन्यवाद

+0

मेरा सबसे अच्छा सुझाव यह नहीं करना है। अपने डेटा को स्थानांतरित करने के लिए जेसन, एक्सएमएल या कुछ और का प्रयोग करें। कार्यान्वित करें कि FIRST, यदि यह बहुत धीमा हो जाता है तो विश्लेषण करें कि समय क्या ले रहा है ... – Cine

+1

मैंने एक्सएमएल सीरियलाइजेशन के साथ शुरुआत की और बाइनरी सीरियलाइजेशन की तुलना में यह धीमा साबित हुआ (दोनों सिरों को सी ++ एप्लिकेशन चला रहा है)। यही कारण है कि मैंने बूस्ट को चुना। सरलीकरण पहली जगह पर। –

+0

क्या आपने एक साधारण COM अनुप्रयोग, सी ++ और विकसित करने पर विचार किया है।जहां तक ​​मुझे पता है एनईटी COM प्रौद्योगिकी का समर्थन करता है। –

उत्तर

4

gzip सीधे क्रमबद्धता के साथ मदद नहीं करेगा - यह सिर्फ (प्रयास करने के लिए) एक धारा हटना होगा। यह स्ट्रीम में डुप्लिकेट डेटा की मात्रा के आधार पर, या नहीं, मदद कर सकता है। छोटे टेक्स्ट वाले घने डेटा के लिए, मैंने gzip को पेलोड के आकार में वृद्धि देखी है।

व्यक्तिगत तौर पर मैं protocol buffers यहाँ पर विचार करेंगे (लेकिन मैं पक्षपाती हूँ, जैसा कि मैंने many extensions के लेखकों में से एक हूँ)। आप आम तौर पर (लेकिन हमेशा नहीं) संदेशों को मूल भाषा (ए। प्रोोटो फ़ाइल) में परिभाषित करते हैं, और कक्षाएं उत्पन्न करने के लिए भाषा-विशिष्ट टूल चलाते हैं। प्रदर्शन बहुत अच्छा है - नेट पर ध्यान केंद्रित कर यह दूर इनबिल्ट serializers (123)

+0

+1 –

5

मैं प्रोटोकॉल बफ़र, जो Googles खुद क्रमबद्धता पुस्तकालय है की सिफारिश करेंगे। इसमें नेट, सी ++ और जावा सीरियलाइज़र दोनों हैं। अधिकांश कार्यान्वयन भी काफी तेज हैं।

http://code.google.com/p/protobuf/

+0

धन्यवाद सुझाव के लिए। मैं इसे देख लूंगा। पीबी का सुझाव देने के लिए –

3

एक और संभावना Thrift होगा, यह और भी बैकेंड है पार कर सकते हैं और यदि आवश्यक हो कोड के लिए आवश्यक का एक अच्छा हिस्सा प्रदान करता है नेटवर्क संचार - यदि आप स्केल करना चाहते हैं।

यदि आप केवल आसान ऑब्जेक्ट सीरियलाइजेशन चाहते हैं तो मुझे json.org पर एक नज़र डालेंगी। सी ++/.NET कार्यान्वयन के बहुत सारे हैं।