C # делает удаление объекта из обработчиков событий List clear - PullRequest
1 голос
/ 28 октября 2019

У меня есть .NET Core с SignalR, который принимает клиентские подключения. Для каждого соединения создается так называемый «планировщик», который хранится в словаре. Как только соединение закрыто, этот объект планировщика удаляется из списка.

Теперь для этих объектов планировщика я установил некоторые обработчики CollectionChanged для свойств объекта, например:

...
scheduler.Grades.CollectionChanged += (s, e) => this.GradesListener(s, e, connectionId);
scheduler.Raws.CollectionChanged += (s, e) => this.MaterialsListener(s, e, connectionId);
scheduler.Heats.CollectionChanged += (s, e) => this.HeatsListener(s, e, connectionId);
...

Поскольку существуетУтечка памяти в приложении. Мой вопрос: если я удаляю планировщик из Словаря (я делаю это с Dictionary.Remove(key)), удаляются ли и слушатели событий? Я бы так подумал, потому что свойства (Grades, Raws, Heats ...) также будут удалены, верно?

Если обработчики не удаляются автоматически, как бы я "отменил регистрацию" их?

Дайте мне знать, если мне нужно предоставить больше кода.

Извините, если такой вопрос задавался ранее, я просто не смог найти ответ.

1 Ответ

0 голосов
/ 28 октября 2019

Вы правы, после того, как вы удалите записи из Grades, Raws и Heats, GC будет очищать память нормально.

Проблема в том, пока вы не удалите их. this Экземпляр не может быть очищен.

Более подробную информацию о том, как избежать утечек памяти , можно найти здесь .

...