2009-05-29 10 views
18

मेरे पास एक .NET 2.0 सी # क्लिकऑन ऐप है और यह वेब सेवाओं के माध्यम से अपने डेटा से जुड़ता है। मुझे बताया गया है कि एप्लिकेशन को संभावित रूप से गति देने का एक तरीका पहले से ही एक सीरियलाइजेशन असेंबली उत्पन्न करना है। मेरे सामने इस पर कई सवाल हैं।सीरियलाइजेशन असेंबली। क्या इसकी आवश्यकता है या नहीं?

  1. एक धारावाहिक असेंबली उत्पन्न करने के लिए डिफ़ॉल्ट सेटिंग ऑटो है। वीएस2005 का उपयोग यह निर्धारित करने के लिए करता है कि धारावाहिक असेंबली उत्पन्न करना है या नहीं? ऐसा लगता है कि यह डीबग कॉन्फ़िगरेशन के तहत उत्पन्न नहीं होता है, लेकिन यह रिलीज कॉन्फ़िगरेशन के तहत होता है, लेकिन मैं निश्चित रूप से नहीं बता सकता और कहीं भी जानकारी नहीं दे सकता।

  2. क्या सीरियलाइजेशन असेंबली वास्तव में एप्लिकेशन की स्टार्टअप में सुधार करती है? विशेष रूप से यह क्या सुधारता है? क्या मुझे वास्तव में एक क्रमबद्धता असेंबली की आवश्यकता है?

उत्तर

13

यह वास्तव में पूछ रहा है "दूँ मैं तैनात परियोजना में क्रमबद्धता विधानसभाओं पूर्व पैदा करते हैं और इसे शामिल या मैं फ्लाई पर विधानसभाओं पैदा करने की डिफ़ॉल्ट पर वापस गिर जाएगा?" आम तौर पर पहली हिट परफ-वार के बाद बहुत ज्यादा चोट नहीं पहुंचीगी। जहां यह खेल सकता है यह है कि धारावाहिक असेंबली %SYSTEMROOT%\TEMP में उत्पन्न होती है। जो, कुछ मामलों में, प्रक्रिया तक पहुंच नहीं सकती है, जिससे ज्यादातर मामलों में घातक अपवाद होते हैं।

4

ज्यादातर मामलों में, आप इस से एक बहुत बड़ा लाभ को देखने के लिए, खासकर यदि आप एप्लिकेशन थोड़ी देर के लिए खुला रखने की संभावना नहीं है। एक सीरियलाइजेशन असेंबली को प्री-जनरेटिंग मुख्य रूप से पहले समय (एक्सई लाइफस्टाइल में) में मदद करता है कि आप एक विशिष्ट प्रकार को xml के रूप में क्रमबद्ध करते हैं।

6

यह आपकी स्थिति के लिए प्रासंगिक नहीं है, लेकिन सीरियलाइजेशन असेंबली को पूर्व-उत्पन्न करने का एक और अच्छा कारण है - SQL सर्वर (यानी SQLCLR) में अपना कोड होस्ट करते समय यह आवश्यक है। SQL सर्वर इन असेंबली को गतिशील रूप से उत्पन्न करने की अनुमति नहीं देता है, इसलिए आपका serialization कोड SQL सर्वर के अंदर विफल हो जाएगा।

1

Intellitrace के अनुसार, केवल पहली बार जब आप एक प्रकार एक्सएमएल-क्रमानुसार, एक FileNotFoundException फेंक दिया जाता है और फिर पकड़ लिया। इसका मतलब है कि सीएलआर उस विशिष्ट असेंबली के लिए सभी एक्सएमएल-सीरियलाइज़र युक्त असेंबली लोड करने की अपेक्षा करता है और जब यह नहीं मिलता है, तो XmlSerializer को सिग्नल करने के लिए फ़ाइल नॉटफाउंड अपवाद फेंक दिया जाता है: "अरे! डर्न असेंबली जेनरेट करें!" और यह "कैच" के दौरान होता है और फिर पहले नहीं मिली फ़ाइल मौजूद होती है।

मैंने कहीं पढ़ा है कि तर्क के लिए प्रयास-पकड़ का उपयोग करना एक बुरा अभ्यास है। आईडीके क्यों माइक्रोसॉफ्ट ने इस दृष्टिकोण का उपयोग किया है ...

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