C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■91533 / )  Re[7]: メモリリークに関して
□投稿者/ kiku (108回)-(2019/07/04(Thu) 09:08:37)
No91530 (魔界の仮面弁士 さん) に返信
> 一方 .NET Comapct Framwork の場合、ソースコードは提供されていませんが、
> No91525 の実験結果から、Form.Dispose(bool) は特に存在しておらず、
> 直接 Control.Dispose(bool) がそのまま呼ばれていることが確認できました。

だとすると、
子コントロールは明示的にDisposeしなくても良く、
子コントロールが保持するFontなどのアンマネージリソースのみをDisposeすれば良いのでしょうか?

> Nothing の代入有無で、本当に解放状況が変化するかどうかを確認してみました。
> 端末を再起動して、空きメモリが十分に確保されている状態において、
> Button1 でモードレス フォームを表示させた後、
> Button2 でそれを Close させています。
> すると、Close 直後の ★の行の Nothing 代入がコメントアウトされていた場合、
> Form2 および LabelEx が直ちに Dispose されないケースが確認できました。
> しかし Nothing 代入するようにした場合は、Button2 の時点ですぐに Dispose されるようになりました。
> ただ、何度も実験を繰り返すと空きメモリが減ってくるようで、
> その場合はどうやら GC が発動するらしく、Nothing 代入せずとも
> Dispose される結果になるようです。

そうすると、子コントロールは明示的にDisposeを行って、
子コントロールにnull(今回C#なため)を設定し、
子コントロールが保持するアンマネージリソースに対しても明示的にDisposeを行い、
その参照もnullに設定するのが良さそうと理解しました。

返信 編集キー/


管理者用

- Child Tree -