2010-06-03 53 views
5

在下面的例子中,我在構造函數中實習字符串,這很好。然而,當我從二進制格式化器反序列化對象時,我不認爲該字符串將被調用,因爲構造函數應該被調用。我應該如何確保_name字符串被攔截? ...或者它會被攔截好嗎?我應該如何處理字符串在反序列化中的實習?

編輯:所以它似乎工作(正確實習字符串)沒有處理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 2010-06-03 12:00:29

回答

2

如果實現了ISerializable接口(而不是屬性)這是可能的。它會讓你做反序列化。

但它似乎很沒有必要。你確定你正在完成任何事情嗎?

+3

是的。節省內存 – DayOne 2010-06-03 12:00:35

+1

這是一個微型優化...您必須有一個非常好的理由,例如使用嵌入式系統,才能將其作爲字符串Interning的原因。 – Dykam 2010-06-03 12:25:14

+2

我有充足的理由歡呼 – DayOne 2010-06-03 12:38:13

相關問題