Re: Правильно отписаться от событий
От: Lloyd Россия  
Дата: 01.12.10 16:02
Оценка: 1 (1) +1
Здравствуйте, America, Вы писали:

A>Вопрос: Когда я все ссылки на объект UsingSettings удаляются, удалит ли его GC, ведь ссылка в списке обработчиков собития SowColumnsChanged ссылка на данный класс поидее остаётся?


Вы сами ответили на свой вопрос.

A>В деструктор соответственно отписки от событий тоже н езапишеш.


Финализаор не будет вызван, т.к. на объект есть ссылки.

A>Делал тестовую программу где создавал много объектов, и отписывался от событий с помощью специального метода, но GC всёравно ничего не собирал, даже если написать GC.Collect(). К тому-же в этом случае теряется приемущество автоматической сборки мусора(надо в точках где завершается использование объекта ставить код отписывания от событий). Как правильно поступить в такой ситуации(желательно чтоб отписывание от событий было автоматическое, если это возможно).


Можно замутить специальный легковесный объект-прокси, который будет держать WeakReference-ссылку на UsingSettings и переадресовывать все вызовы. Или, если есть возможность, переопределить add/remove методы события ShowColumnsChanged и хранить WeakReference-ы на обработчики.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.