Clearはコントロールを破棄しないため、メモリ リークが発生します。リンクから:
Clear メソッドを呼び出しても、コントロール ハンドルはメモリから削除されません。メモリ リークを回避するには、Dispose メソッドを明示的に呼び出す必要があります。
ループ内で破棄するとインデックス作成が台無しになるため、コントロール コレクションを別のリストにコピーしてForEach
ループを実行するか、後方For
ループを使用することができます。
for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i)
myTableLayoutPanelControls[i].Dispose();
呼び出すDispose
と、メモリからコントロールが削除されます (GC が取得したとき)。これは、子コントロールのDispose
メソッドの呼び出しも処理します。
1 つのキャッチは、実装するカスタム コントロールがある場合、またはメソッドを呼び出さずにメソッドをIDisposable
オーバーライドしている場合です。オブジェクトのメソッドで、スコープ外のイベントからサブスクライブを解除したことを確認する必要があります。そうしないと、その参照によってオブジェクトが存続します。Dispose
base
Dispose