.NET でメモリ リークが発生する可能性のあるすべての方法は何ですか?
私は2つ知っています:
- Event Handlers/Delegatesの登録が適切に解除されていません。
- Windows フォームで動的な子コントロールを破棄しない:
例:
// Causes Leaks
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
// Correct Code
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
label.Dispose();
更新:アイデアは、あまり明白ではない一般的な落とし穴(上記など)をリストすることです。通常、ガベージ コレクターのおかげで、メモリ リークは大きな問題ではないと考えられています。以前の C++ とは異なります。
素晴らしいディスカッションですが、明確にさせてください... 定義により、.NET にオブジェクトへの参照が残っていない場合、それはいつかガベージ コレクションになります。したがって、これはメモリ リークを誘発する方法ではありません。
マネージド環境では、認識していないオブジェクトへの意図しない参照があった場合、メモリ リークと見なします (したがって、私の質問の 2 つの例)。
では、このようなメモリ リークが発生する可能性のあるさまざまな方法にはどのようなものがあるでしょうか。