スポンサーリンク

.net ShowDialogはUsingで開く

FormにもDispose()があるのでUsing可能

ShowDialog()で子フォームを開くと子フォーム側でCloseしてもDisopose(メモリの破棄)はされない。

// ShowDialog() で表示したフォームを閉じた後
using (var form = new MyForm())
{
    form.ShowDialog();
} // ← ここで Dispose が呼ばれる

ただ忘れても事故率はかなり低い

• GC(ガベージコレクター)が最終的に回収する
明示的に Dispose() しなくても、GC がいずれアンマネージドリソースを解放します。
• フォームの生存期間が短い
短命なフォームであれば、メモリ上に残り続ける時間が短いため影響が出にくい。
• リソース量が少ない
シンプルなフォームはファイルハンドルやGDIオブジェクト等のリソースが少なく、リークしても症状が出にくい。

ではどんな時に事故るのか?

長時間稼働 + ShowDialog を繰り返し呼び出す

Dispose されないフォームが蓄積

GDIオブジェクト枯渇 / メモリ増加

描画崩れ・例外・クラッシュ