нужно ли отписываться от событий? - PullRequest
20 голосов
/ 03 июня 2010

Насколько серьезным может быть НЕ отписываться от событий в c #? Это обязательное или желательное действие?

Ответы [ 3 ]

20 голосов
/ 03 июня 2010

Это важная часть документации MSDN , которую следует принять во внимание

Чтобы ваш обработчик событий не мог вызывается, когда событие поднял, просто отписаться от событие. В целях предотвращения ресурса утечки, важно отписаться от событий, прежде чем избавиться от Абонентский объект. До тебя отписаться от события, многоадресный делегат, который лежит в основе Событие в объекте публикации имеет ссылка на делегата, который инкапсулирует событие подписчика обработчик. Пока издательство объект содержит эту ссылку, ваш Абонентский объект не будет мусором собраны.

4 голосов
/ 03 июня 2010

Зависит от того, как долго живут подписчик и издатель. Вот углубленная статья о проблеме и нескольких подходах к ее решению здесь: Решение проблемы с событиями: слабые обработчики событий

3 голосов
/ 03 июня 2010

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

http://developers.slashdot.org/article.pl?sid=07/11/17/0552247

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...