FormにもDispose()があるのでUsing可能
ShowDialog()で子フォームを開くと子フォーム側でCloseしてもDisopose(メモリの破棄)はされない。
// ShowDialog() で表示したフォームを閉じた後
using (var form = new MyForm())
{
form.ShowDialog();
} // ← ここで Dispose が呼ばれる
ただ忘れても事故率はかなり低い
• GC(ガベージコレクター)が最終的に回収する
明示的に Dispose() しなくても、GC がいずれアンマネージドリソースを解放します。
• フォームの生存期間が短い
短命なフォームであれば、メモリ上に残り続ける時間が短いため影響が出にくい。
• リソース量が少ない
シンプルなフォームはファイルハンドルやGDIオブジェクト等のリソースが少なく、リークしても症状が出にくい。
ではどんな時に事故るのか?
長時間稼働 + ShowDialog を繰り返し呼び出す
↓
Dispose されないフォームが蓄積
↓
GDIオブジェクト枯渇 / メモリ増加
↓
描画崩れ・例外・クラッシュ
