Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сборщик мусора не может собирать объект, используемый приложением, пока код приложения может достичь этого объекта. Как сообщается, приложение имеет сильную ссылку на объект.
Слабая ссылка позволяет сборщику мусора собирать объект, позволяя приложению получить доступ к объекту. Слабая ссылка действительна только в течение неопределенного периода времени до тех пор, пока объект не будет собран, если нет надежных ссылок. Если вы используете слабую ссылку, приложение по-прежнему может получить надежную ссылку на объект, что предотвращает его сбор. Однако всегда существует риск того, что сборщик мусора доберется до объекта раньше, чем будет восстановлена жёсткая ссылка.
Слабые ссылки полезны для объектов, которые используют много памяти, но их можно легко воссоздать, если они будут собраны сборщиком мусора.
Предположим, что представление дерева в приложении Windows Forms отображает сложный иерархический выбор параметров для пользователя. Если базовые данные являются большими, сохранение дерева в памяти неэффективно, если пользователь участвует в чем-то другом в приложении.
Когда пользователь переключается на другую часть приложения, можно использовать WeakReference класс для создания слабой ссылки на дерево и уничтожения всех сильных ссылок. Когда пользователь переключается обратно в дерево, приложение пытается получить надежную ссылку на дерево и, если это успешно, не восстанавливает дерево.
Чтобы установить слабую ссылку на объект, создайте WeakReference используя экземпляр объекта, который нужно отслеживать. Пример кода смотрите в библиотеке классов в разделе WeakReference.
Короткие и длинные слабые ссылки
Вы можете создать короткую слабую ссылку или длинную слабую ссылку:
Коротко
Цель короткой слабой ссылки становится
null, когда объект реклюжируется сборкой мусора. Слабая ссылка сама по себе является управляемым объектом и подвергается сборке мусора точно так же, как и любой другой управляемый объект. Короткая слабая ссылка — это конструктор без параметров для WeakReference.Длинный
После вызова метода объекта Finalize сохраняется длинная слабая ссылка. Это позволяет воссоздать объект, но состояние объекта остается непредсказуемым. Чтобы использовать длинную ссылку, укажите
trueв конструкторе WeakReference .Если тип объекта не имеет метода Finalize, применяется функциональность короткой слабой ссылки, и слабая ссылка действует только до тех пор, пока целевой объект не будет собран, что может произойти в любое время после работы финализатора.
Чтобы установить сильную ссылку и снова использовать объект, приведите свойство Target элемента WeakReference к типу этого объекта. Если Target свойство вернуло значение null, объект был собран; в противном случае можно продолжать использовать объект, так как приложение восстановило сильную ссылку на него.
Рекомендации по использованию слабых ссылок
Используйте длинные слабые ссылки, только если это необходимо, так как состояние объекта непредсказуемо после завершения.
Избегайте использования слабых ссылок на небольшие объекты, так как сам указатель может быть как большим, так и больше.
Избегайте использования слабых ссылок в качестве автоматического решения проблем управления памятью. Вместо этого разработайте эффективную политику кэширования для обработки объектов приложения.