私は実装しましたDispose
...それをサポートするすべての場所。すべてのイベント ハンドラーを削除しています。私はネイティブコードを呼び出していません。
すべての辞書を繰り返し処理し、値を null に設定して、すべての項目で .Clear() を呼び出します。
質問:
コードがリークしている場所を特定するにはどうすればよいですか?
一晩中テストを実行して、最初にリークを発見しました。一定量のメモリを使用するため、成長してからやや静的になります。次に、フォアグラウンド スレッド ディスプレイ メモリを次のように作成しました。
if (key.KeyChar == 'g')
{
long pre = GC.GetTotalMemory(false);
long post = GC.GetTotalMemory(true);
Console.WriteLine("{2} Pre:{0} \tPost:{1}", pre, post, System.DateTime.Now);
GC.Collect();
}
これを数回 (数時間にわたって、時々「g」を押しながら) 実行したところ、増え続ける数値が表示されました。