2010-03-30 17 views
7

मैं XMLSerializer क्लास के साथ कुछ सामान करता हूं। शुरुआती लोगों की तरह मुझे ऐप शुरू करने पर प्रदर्शन के मुद्दे का सामना करना पड़ता है। मैंने बहुत से ब्लॉग, लेख पढ़े और आखिरकार एसजीएनएन टूल का उपयोग किया। अब प्रदर्शन ठीक दिखता है लेकिन कुछ चीजें अभी भी मेरे लिए स्पष्ट नहीं हैं।एसजीएनएन एक्सएमएलएसरियलाइज़र - होना चाहिए .XMLSerializers.dll वर्तमान प्रोजेक्ट या जीएसी के संदर्भ के रूप में जोड़ा गया है?

1) मैं इस तरह SGEN वाक्य रचना का उपयोग करना चाहिए:

SGen.exe /assembly:MyAssembly /type:MyRootXmlType 

या यह काफी है बस (मैं इस वाक्य रचना वर्तमान में उपयोग करने के लिए, मैं अपने विधानसभा में केवल एक ही Serializable वर्ग है):

SGen.exe /assembly:MyAssembly 

जब अभ्यास/पैरामीटर अभ्यास में उपयोगी हो सकता है?

2) मैं MSDN पर पढ़ा (http://msdn.microsoft.com/en-us/library/ee704594.aspx)

यह आदेश serializer विधानसभा MyAssembly.XmlSerializers.dll, जो वर्तमान परियोजना के लिए या GAC के लिए एक संदर्भ के रूप में शामिल किया जाना चाहिए उत्पन्न करता है ।

लेकिन अन्य सभी ब्लॉग्स और (इतने पर उदाहरण के लिए) लेख पर मैंने पढ़ा है कि पर्याप्त जहां MyAssembly मौजूद है सिर्फ फ़ोल्डर में MyAssembly.XmlSerializers.dll डाल करने के लिए है।

तो क्या सही है?

3) यह केवल .XmlSerilizers.dll उत्पन्न करने के लिए पर्याप्त है और इसे MyAssembly के साथ एक साथ तैनात करना है या क्या मुझे अभी तक मेरे कोड में कुछ जोड़ना चाहिए?

मुझे ऐसा नहीं लगता लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मुझे अपना कोड बदलना पड़ेगा और "जादू" स्वचालित रूप से होता है।

उत्तर

9

यदि आप sgen.exe के लिए तर्क/प्रकार तर्क का उपयोग नहीं करते हैं तो यह असेंबली में सभी सार्वजनिक प्रकारों के लिए डी/क्रमबद्धता कोड उत्पन्न करेगा। ध्यान दें कि [serializable] विशेषता XML क्रमिकरण में उपयोग नहीं की जाती है। मुझे संदेह है कि आप इसे चाहते हैं, जनरेटेड असेंबली को छोटा रखने के लिए उपयोग/टाइप करें।

एक संदर्भ जोड़ना जरूरी नहीं है, एक्सएमएल क्रमबद्धता हमेशा एक विधानसभा की कोशिश करता है। लोड() .xmlSerializers.dll असेंबली पर वैसे भी। इसके अलावा, आप सीधे अपने कोड में जेनरेट किए गए XmlSerializationWriterXxx और XmlSerializationReaderXxx कक्षाओं का संदर्भ नहीं देंगे। इसका एक फायदा होता है, जब आप समाधान में प्रोजेक्ट को शामिल करते हैं तो बिल्ड सिस्टम स्वचालित रूप से असेंबली की प्रतिलिपि बनायेगा।

इसे जीएसी में स्थापित करना केवल तभी विचार करने योग्य है जब विभिन्न ऐप्स XML फ़ाइल को क्रमबद्ध और deserialize करते हैं। आप असेंबली को हाथ से कॉपी करके .XmlSerializers.dll असेंबली के साथ अन्य ऐप्स भी प्रदान कर सकते हैं। जो थोड़ा सा त्रुटि प्रवण है, यहां अपने निर्णय का प्रयोग करें। प्रतिलिपि स्वचालित करने के लिए पिछले पैराग्राफ को जांचें।

+0

बहुत स्पष्ट उत्तर, बधाई के लिए धन्यवाद! – binball