.Netのformでメモリリーク(解放できないという問題)
.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オブジェクトを確保しておき、利用時の初期化用の関数を用意するしかなさそうでした。
実際、そのようにすると嘘のようにメモリの増加が無くなりました・・・
Author And Source
この問題について(.Netのformでメモリリーク(解放できないという問題)), 我々は、より多くの情報をここで見つけました https://qiita.com/coo2020/items/55009abc572b895cf121著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .