W poniższym przykładzie wstawiam ciąg znaków w konstruktorze, który jest w porządku. Jednak gdy deserializuję obiekt z binarnego formatyzatora, nie sądzę, aby łańcuch był internowany, ponieważ powinien on wywoływać konstruktora. W jaki sposób powinienem zapewnić internalizację łańcucha _name? ... czy będzie internowany w porządku?Jak powinienem obsługiwać napis Internowanie przy deserializacji?
Edit: Wydaje się więc do pracy (stażyści ciągi poprawnie) bez obsługi OnDeserializedAttribute. Jak to robi?
Używam profilera pamięci, z lub bez metody poniżej nadal internuje ciągi? Magia? : -/
[OnDeserializedAttribute]
private void OnDeserialized(StreamingContext context)
{
_name = string.Intern(_name);
}
Dzięki
[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;
}
}
Dlaczego wyraźnie Intern ciąg? To jest wewnętrzny mechanizm .net. – Andrey