действительно ли необходимо отказаться от подписки от событий?

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

21
задан NibblyPig 3 June 2010 в 07:33
поделиться

3 ответа

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

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

21
ответ дан 29 November 2019 в 21:32
поделиться

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

4
ответ дан 29 November 2019 в 21:32
поделиться

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

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

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

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

3
ответ дан 29 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: