Другое использование слабых ссылок? - PullRequest
7 голосов
/ 16 сентября 2009

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

Каковы некоторые другие ситуации (более конкретные, чем просто "результаты кэширования"), где использование слабых ссылок является хорошей идеей TM ?

Ответы [ 4 ]

1 голос
/ 12 ноября 2014

Основное правильное использование слабых ссылок - выявить вещи, важность которых обусловлена ​​существованием сильных ссылок на них . Два наиболее распространенных сценария:

  • Объект содержит ссылку на что-то не потому, что он «заботится» о рассматриваемом объекте, а потому, что другие сущности, которые заботятся об объекте, могут захотеть, чтобы он что-то с ним сделал. Если через некоторое время никто больше не заботится об объекте, нет никаких причин, по которым другие сущности должны продолжать манипулировать им от имени «всех сущностей, которые заботятся о нем».

  • Стоимость памяти для хранения множества ссылок на один и тот же неизменяемый объект может быть намного ниже, чем стоимость памяти для хранения ссылок на множество идентичных объектов, и сравнение ссылок на один и тот же объект может быть намного быстрее, чем сравнение идентичных объектов , Затраты памяти на создание неизменяемого объекта, отказ от него, его получение и создание идентичного объекта по существу такие же, как стоимость создания объекта и последующего возврата второй ссылки на него. Возврат ссылки на существующий объект , который в любом случае должен быть сохранен , является большой победой; возврат ссылки на объект, который имел право на коллекцию, но еще не был собран, может быть или не быть выигрышем (обычно это небольшой выигрыш, но в поколенческом GC это иногда может слегка ухудшить производительность); во многих случаях последних преимуществ недостаточно для оправдания сохранения объекта дольше, чем это было бы необходимо в противном случае.

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

Я использую слабые ссылки для нескольких вещей ...

Мне нравится создавать «Слабые события» в .Net, чтобы не допустить, чтобы наблюдаемые слишком долго поддерживали жизнь наблюдателей.

Я также использовал слабые события для обнаружения утечек памяти .

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

Во Flex используйте слабые ссылки, чтобы избежать утечек памяти .

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

0 голосов
/ 27 сентября 2009

В Python сборщик мусора использует подсчет ссылок, чтобы решить, когда «уничтожать» или иным образом освобождать объект. Обычная циклическая ссылка может привести к тому, что объекты никогда не будут собираться мусором, потому что их счетчики ссылок соответственно остаются на 1 или выше; но при использовании слабых ссылок позволит правильно очистить оба / все объекты, когда они выйдут из области видимости.

...