2010-06-03 20 views
5

नीचे दिए गए उदाहरण में मैं कन्स्ट्रक्टर में स्ट्रिंग को इंटर्न कर रहा हूं जो ठीक है। हालांकि जब मैं बाइनरी फॉर्मेटर से वस्तु को निराश करता हूं तो मुझे नहीं लगता कि स्ट्रिंग को प्रशिक्षित किया जाना चाहिए क्योंकि कन्स्ट्रक्टर को कॉल किया जाना चाहिए। मुझे _name स्ट्रिंग को इंटर्न करने के लिए कैसे सुनिश्चित किया जाना चाहिए? ... या यह ठीक से प्रशिक्षित किया जाएगा?मुझे deserialization पर स्ट्रिंग इंटर्निंग को कैसे संभालना चाहिए?

संपादित करें: तो यह OnDeserializedAttribute से निपटने के बिना (सही ढंग से इंटर्न तार) काम करने के लिए लगता है। इससे ऐसा कैसे होता है?

मैं एक स्मृति प्रोफाइलर उपयोग कर रहा हूँ, के साथ या विधि नीचे यह अभी भी तार इंटर्न के बिना? जादू? : -/

[OnDeserializedAttribute] 
    private void OnDeserialized(StreamingContext context) 
    { 
     _name = string.Intern(_name); 
    } 

धन्यवाद

[Serializable] 
class City 
{ 
    private readonly string _name; 

    public City(string t) 
    { 
     _name = string.Intern(t); 
    } 

    public string Name 
    { 
     get { return _name; } 
    } 

    public override string ToString() 
    { 
     return _name; 
    } 
} 
+1

आप स्पष्ट रूप से आंतरिक स्ट्रिंग क्यों करते हैं? यह .NET का आंतरिक तंत्र है। – Andrey

उत्तर

2

अगर आप ISerializable इंटरफेस (नहीं विशेषता) को लागू यह संभव है। यह आपको deserialization करने देगा।

लेकिन यह बहुत अनावश्यक लगता है। क्या आप वाकई इसके साथ कुछ हासिल कर रहे हैं?

+3

हां। स्मृति – DayOne

+1

एक माइक्रो अनुकूलन है कि बचत ... आप एक बहुत अच्छी हो, एक एम्बेडेड सिस्टम के साथ काम करने की तरह है करने के लिए है कि स्ट्रिंग होना शामिल करने के लिए कारण के रूप में होना चाहिए। – Dykam

+2

मेरे पास अच्छे कारण चीयर्स हैं – DayOne

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