Это плохо, чтобы не отменить регистрацию обработчиков событий?

Если у меня есть приложение с несколькими зарегистрированными обработчиками событий (и объекты, использующие события, не удаляются до тех пор, пока приложение не будет закрыто), действительно ли мне нужно беспокоиться об отмене регистрации этих обработчиков? Единственная веская причина, которую я мог видеть, состоит в том, что могут быть некоторые дополнительные издержки, если запускаются события, о которых вам не нужно заботиться (т. Е. У вас есть несколько обработчиков, зарегистрированных на одно событие). Есть ли другие веские причины для этого? Кто-нибудь сталкивался с серьезными проблемами, потому что они не отменили регистрацию событий?

Ответы на вопрос(2)

Решение Вопроса

Если у вас естьA опубликовать событие, иB подписаться на событие (обработчик), тогда только проблема не отписаться, еслиA будет жить намного дольше, чемB, По сути, подписка на событие означает, чтоA еще можно увидетьBпоэтому он не будет собирать мусор и будет запускать события, даже если вы об этом забыли (и, возможно,Disposed() Это).

Например, это проблема, еслиA является статическим событием, и ваше приложение работает некоторое время послеB умирает ... ноB будет жить до тех пор, покаA таким образомB не будет мусора.

Важно отметить, можно спросить следующее:

if B lives a lot longer than A, will B keep A from being garbage collected?

И ответом на это является «нет». B не имеет ссылки на A через событие; А будет собираться как обычно

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

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

Ваш ответ на вопрос