Я поддерживаю веб-приложение с утечкой памяти.
Основываясь на результатах моего исследования с использованием профилировщика памяти Red Gate ANTS, я уверен, что утечка памяти вызвана обработчиками событий на бизнес-уровне.
Существует коллекция, которая регистрирует обработчик событий для каждого добавляемого элемента, чтобы коллекция могла пересортироваться при изменении даты элемента. Похоже, что этот обработчик событий является виновником.
Бизнес-уровень для этого приложения довольно сложен, поэтому сохранение коллекции и ее элементов в памяти перетаскивает вместе с ней кучу других объектов.
Я реализовал IDisposable в коллекции и удалил обработчики событий в методе Dispose:
p.OnPunchDateChanged -= this.OnPunchDateChanged;
Однако реализация IDisposable не помогает, так как я не могу обернуть все ссылки на коллекцию в блоки использования или try / catch. Эта коллекция используется частями приложения, которые я не могу контролировать.
Как очистить эти обработчики событий, чтобы устранить утечку памяти?