Добавление и удаление обработчика событий в .net - PullRequest
1 голос
/ 06 марта 2012

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

  1. Создаются ли объекты событий в памяти? или это просто статический объект, который удаляется после запуска события?

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

Ответы [ 3 ]

1 голос
/ 06 марта 2012
  1. События могут быть как статическими, так и привязанными к экземпляру. Подписчики на событие никогда не удаляются, пока вещатель событий активен, если это не сделано явно, обычно с помощью оператора - =.

  2. Да, да и да. Если вы не очистите своих подписчиков, у вас возникнет утечка памяти.

Если все это вас беспокоит, возможно, вы можете обратиться к шаблону WeakEvent .

1 голос
/ 06 марта 2012

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

0 голосов
/ 06 марта 2012

events подобны delegates (с другим слоем защита ).

когда вы регистрируетесь на событие - вы фактически делаете ссылку на другой объект.

этот объект не может пройти GC, потому что вы сделали ссылку на него!

это не "без ссылок".

но ваш объект МОЖЕТ пройти через GC. (если нет ссылки).

так что вы получите утечку памяти.

Вы должны вручную удалить ссылку.

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