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;
    }
}
4

2 に答える 2

2

ISerializableこれは、 (属性ではなく)インターフェースを実装する場合に可能です。これにより、逆シリアル化を実行できます。

しかし、それは非常に不必要なようです。これで何かを成し遂げてもよろしいですか?

于 2010-06-03T11:59:53.893 に答える
0

OnDeserializedAttributeを見てください

于 2010-06-03T12:00:51.847 に答える