#.Netのformでメモリリーク(解放できないという問題)
C# .Netでオリジナルのメッセージボックスを作り、usingで囲んでnew form()をして、showDialogするだけ、という単純なものを使っていたところ、メモリ使用量が増えていく現象が不思議で仕方ありませんでした。
結論からいうと、
Control クラス(を継承するクラス)は特別で、特別なところから参照されています。
null(VB なら Nothing)を代入しても解放されません。
ということがMSDNに記載されていました。
回避方法はformオブジェクトの再利用しかないということで、
何度も表示/非表示を繰り返すなら、new - Show - Close ではなく、
Visible プロパティを操作することを勧めます。
また、ShowDialog を使う場合は、new - ShowDialog - Close - Dispose とするのではなく、
ShowDialog - Close を繰り返します。
new~Dispose を繰り返すと、リークはしませんが、メモリの確保量は
(実験されているように)大きくなるので、パフォーマンスに影響が出ると思われます。
再生ではなく、再利用することを勧めます。
ということで、厳密な名称についてメモリリークではないが、メモリが解放されないので正式な名称こそページ内に出てきませんが、メモリを解放する能力が無いという点でメモリリークと何が違うのかわかりませんが、利用者からは同じ現象に見えます。
再利用ということで、staticでformオブジェクトを確保しておき、利用時の初期化用の関数を用意するしかなさそうでした。
実際、そのようにすると嘘のようにメモリの増加が無くなりました・・・