Работает ли WeakReference со String? - PullRequest
       14

Работает ли WeakReference со String?

2 голосов
/ 17 сентября 2009

В .NET 3.5, WeakReference работает со String, или мне нужно обернуть его в небольшой «класс», чтобы он работал с ним?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

System.String (string в C #) является ссылочным типом, поэтому нет никаких причин, по которым он не должен идеально работать с WeakReference. Не обращайте внимания на тот факт, что это в некотором смысле особый ссылочный тип (для начала неизменный) - CLR видит его как ссылочный тип.

Сказав это, этот другой поток StackOverflow отмечает, что ссылки на строки могут быть "интернированы" во многих ситуациях, и, следовательно, "ожидаемое" поведение в отношении сборки мусора не наблюдается. *

1 голос
/ 17 сентября 2009

Это определенно будет работать с WeakReference без каких-либо проблем, поскольку System.String - простой ссылочный тип. Было бы интересно увидеть ваш вариант использования WeakReference, так как он не соответствует «обычному» использованию WeakReference.

Из Руководства MSDN :

Используйте длинные слабые ссылки только тогда, когда это необходимо, поскольку состояние объекта непредсказуемо после завершения.

Избегайте использования слабых ссылок на небольшие объекты, поскольку сам указатель может быть как большим, так и большим.

Избегайте использования слабых ссылок в качестве автоматического решения проблем управления памятью. Вместо этого разработайте эффективную политику кэширования для обработки объектов вашего приложения.

0 голосов
/ 18 ноября 2010

Как правило, нет особого смысла использовать слабую ссылку для указания на глубоко неизменяемый объект, особенно тот, который не ссылается ни на какие другие объекты. Если данные полезны, вы должны иметь сильную ссылку. Если это не полезно, вы не должны иметь никаких ссылок. Использование WeakReference действительно целесообразно только в тех случаях, когда полезность объекта со слабой ссылкой зависит от наличия сильной ссылки; наиболее распространенный такой случай, когда слабая ссылка используется для помещения информации в объект, который будет прочитан через сильную ссылку. Если никто не собирается читать информацию, помещенную в объект, у автора больше нет причин беспокоиться об этом.

...