प्रोटोबफ-नेट एक रणनीति पैटर्न का उपयोग करता है; आवश्यकतानुसार (केवल एक बार प्रति प्रकार) यह प्रकारों को देखने के लिए प्रतिबिंब का उपयोग करता है, और धारावाहिकों (एक सामान्य इंटरफेस के आधार पर) का एक सेट बनाता है जो इसे धारावाहिक और deserialize करने के लिए उपयोग कर सकते हैं - उपयोग में यह बस के माध्यम से कदम है धारावाहिकों के ज्ञात सेट।
के अंदर, यह सदस्यों से बात करते समय प्रतिबिंब के समझदार उपयोग करने की कोशिश करता है; यह गुणों से बात करने के लिए Delegate.CreateDelegate
का उपयोग करता है, और DynamicMethod
(और कस्टम आईएल) फ़ील्ड से बात करने के लिए (जब संभव हो, यह लक्ष्य ढांचे पर निर्भर करता है) का उपयोग करता है। इसका मतलब यह है कि यह हमेशा प्रतिनिधि प्रकारों से बात करता है, केवल DynamicInvoke
(जो बहुत धीमा है) के बजाय।
मसा में, मैं मैं जेनरिक मुद्दे पर एक गलती की है लगता है; जटिलता का मतलब है कि जेनिक्स को सिस्टम bent it out of shape in a few places में मजबूर करना, और सक्रिय रूप से कुछ प्रमुख समस्याएं (जटिल मॉडल के लिए) on compact framework का कारण बनती है।
मैं (केवल मेरे सिर में) इस refactor करने के लिए गैर -generic इंटरफेस का उपयोग कर, और बदले के लिए (उपयुक्त चौखटे के लिए) ILGenerator
के अधिक उपयोग करने के कुछ डिजाइन (मेरी पहली पसंद Expression
हो गया होता, लेकिन वह बलों एक उच्च ढांचा संस्करण)। समस्या यह है कि, यह काम करने के लिए काफी समय ले रहा है, और हाल ही में I've been pretty swamped तक।
हाल ही में मैंने start spending some time on protobuf-net again में कामयाब रहा है, इसलिए उम्मीद है कि मैं अनुरोधों का बैकलॉग साफ़ कर दूंगा और जल्द ही इसे शुरू कर दूंगा। यह प्रतिबिंब की तुलना में मॉडल अन्य के साथ काम करने का मेरा इरादा भी है (यानी तार मैपिंग को अलग से वर्णित करना)।
और किसी भी उत्पन्न कोड
मैं भी स्पष्ट करना चाहिए कि आप उत्पन्न कोड उपयोग करना चाहते हैं दो (वैकल्पिक) codegen मार्गों देखते हैं कि उत्पादन नहीं करता है; protogen.exe, या VS add-in, कोड पीढ़ी को .proto फ़ाइल से अनुमति दें।लेकिन यह की आवश्यकता नहीं है - यह मुख्य रूप से उपयोगी है यदि आपके पास मौजूदा .proto फ़ाइल है, या अनुबंध-प्रथम विकास के लिए किसी अन्य भाषा (सी ++ आदि) के साथ अंतःक्रिया करने का इरादा है।
स्रोत
2009-11-12 16:53:41
आप स्रोत पढ़ने की कोशिश की? या सीधे मार्क पूछना भी? – Lazarus
मैंने कोशिश की और यहां तक कि कुछ विचार भी हैं, लेकिन अगर कोई त्वरित जवाब दे सकता है तो यह अच्छा होगा – MichaelT
मैं खुशी से इस बारे में घंटों तक बात करूंगा ;- लेकिन मुझे काम खत्म होने तक इंतजार करना होगा ... –