メモリ リークのある Web アプリケーションを保守しています。
Red Gate ANTS メモリ プロファイラを使用して調査したところ、メモリ リークはビジネス レイヤのイベント ハンドラが原因であることがわかりました。
アイテムの日付が変更されたときにコレクションを再ソートできるように、追加された各アイテムにイベント ハンドラーを登録するコレクションがあります。このイベント ハンドラが原因のようです。
このアプリケーションのビジネス レイヤーは非常に複雑であるため、コレクションとその項目をメモリ内に保持すると、他のオブジェクトも一緒にドラッグされます。
コレクションに IDisposable を実装し、Dispose メソッドのイベント ハンドラーを削除しました。
p.OnPunchDateChanged -= this.OnPunchDateChanged;
ただし、コレクションへのすべての参照を using または try/catch ブロックでラップできないため、IDisposable を実装しても役に立ちません。このコレクションは、私が制御できないアプリケーションの一部で使用されています。
これらのイベント ハンドラーをクリアして、このメモリ リークを解決するにはどうすればよいですか?