6

मैं एक विंडोज़ सेवा अनुप्रयोग लिख रहा हूं जिसे इसके निष्पादन के दौरान बार-बार XML दस्तावेज़ों को क्रमबद्ध और deserialize करने की आवश्यकता है। जैसा कि मुझे सामान्य प्रकारों को क्रमबद्ध और deserialize करने की आवश्यकता है जो संकलन समय के दौरान ज्ञात नहीं हैं (मुझे पूर्व में नहीं पता कि मुझे धारावाहिक/deserialize करने के लिए कितने प्रकार की जरूरत है) मैं जानना चाहता हूं कि कैश रखने के लिए यह एक अच्छा विचार है या नहीं DataContractSerializer ऑब्जेक्ट्स की मैं serializing और वस्तुओं deserializing के लिए तत्काल।क्या DataContractSerializer उदाहरणों को कैश करना अच्छा विचार है?

मैं इस सवाल से पूछ रहा हूं क्योंकि मुझे पता है कि XmlSerializer क्लास उदाहरणों को कैश करना एक अच्छा विचार है क्योंकि वे हुड के नीचे स्मृति में गतिशील असेंबली बनाते हैं और स्मृति में गतिशील रूप से बनाई गई असेंबली कचरा नहीं होती है।

मैंने पढ़ा है कि डेटाकंट्रैक्टसेरियलाइज़र लाइटवेट कोड पीढ़ी पर निर्भर करता है, लेकिन मैं इसके विवरण के साथ सामान्य नहीं हूं। यही कारण है कि मैं इस सवाल से पूछ रहा हूं, मुझे समझने की ज़रूरत है कि क्या मैं डेटाकंट्रैक्टसेरियलाइज़र इंस्टेंस को तत्काल आवश्यक करता हूं, क्योंकि मुझे एक्सएमएलसेरियलाइज़र के रूप में मेमोरी लीक में ले जाया जाएगा?

मैंने आंतरिक गुणों को क्रमबद्ध करने में सक्षम होने के लिए XmlSerializer के बजाय DataContractSerializer का उपयोग करना चुना है।

+0

(टिप्पणी का उत्तर दिया गया) –

उत्तर

4

... यह एक अच्छा विचार XmlSerializer वर्ग उदाहरणों को कैश करने के बाद से वे हुड के नीचे स्मृति में एक गतिशील विधानसभा बनाने ...

XmlSerializer साथ

है, यह वास्तव में है कि क्या आप का उपयोग पर निर्भर करता है सरल कन्स्ट्रक्टर (new XmlSerializer(typeToHandle)), या अधिक जटिल रचनाकार जो आपको रनटाइम पर सभी विशेषताओं आदि निर्दिष्ट करने की अनुमति देते हैं। यदि आप केवल साधारण कन्स्ट्रक्टर का उपयोग करते हैं तो यह पृष्ठभूमि असेंबली का पुन: उपयोग करता है, इसलिए कोई दोहराना नहीं है।

मैं (लेकिन परीक्षण नहीं किया गया) DataContractSerializer इसी तरह काम करने की अपेक्षा करता है; लेकिन वहाँ निश्चित रूप से बस इसे कैशिंग, शायद एक स्थिर केवल पढ़ने के लिए क्षेत्र

ध्यान दें कि DataContractSerializer को प्रतिबंधित करता है XML लेआउट आप आप के लिए उपलब्ध है में में कोई बुराई है ... जब तक आप कि ;-p साथ ठीक कर रहे हैं

+0

क्या आप जानते हैं कि DataContractSerializer का उपयोग करते समय xml लेआउट में कौन से प्रतिबंध लगाए जाते हैं? मैं यह सुनिश्चित करने के लिए सिर्फ यह जानना चाहता हूं कि मैं इसके साथ ठीक हूं: पी –

+1

[XmlAttribute] के बराबर नहीं है, जो सबसे स्पष्ट है। यदि आपका मुख्य उद्देश्य डेटा को क्रमबद्ध करना है, तो यह ठीक है (जैसा कि कई अन्य हैं)। यदि आपका मुख्य उद्देश्य किसी विशिष्ट लेआउट में एक्सएमएल लिखना है, तो यह परेशानी हो सकती है। –

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