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

わんくま同盟

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

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


■91519 / )  Re[3]: メモリリークに関して
□投稿者/ WebSurfer (1853回)-(2019/07/03(Wed) 11:43:19)
No91517 (kiku さん) に返信

自信度は高くなく間違っているかもしれませんので、以下のレスはそのつもりで見てください。

> 通常下記2でVusualStudiooの自動生成されたソース内の
> Control.Addされるため、Control.Dispose内で自動的に
> マネージドリソースもdisposeされる認識でした。

Form コントロールの場合、Dispose(), Dispose(bool) の実装は Control toha違うようです。
下のリンクをクリックして画像を見てください。

http://surferonwww.info/BlogEngine/image.axd?picture=2019%2f7%2fFormDispose0.jpg

VS2008 のヘルプの画像ですが、このあたりはたぶん最新版でも同じはずです。Form に実装され
ている Dispose() と Dispose(boolean) は上の画像の一番上と一番下のものです。

一番下の Form.Dispose (Boolean) メソッドには CE がサポートしているというアイコンがない
のに注目してください。

CE はどうしているかは不明ですが、魔界の仮面弁士さんのレスにある Control.Dispose(bool)
メソッド(画像の上から 3 番目のもの)を使っているのではなかろうかと思われます。

そうであれば、Dispose パターンが実装されていれば、Dispose メソッドを呼び出せば上の画像の
ヘルプの Control.Dispose(Boolean) メソッドの解説に書いてあったように、

"Control とその子コントロールが使用しているアンマネージ リソースを解放します。オプションで、
マネージ リソースも解放します。"

・・・となると思われます。


CE は関係なさそうですが、ご参考までに上の画像のヘルプの Form.Dispose メソッド (Boolean)
の解説の抜粋も書いておきますね。

*** Quote ***
Form で使用されていたリソース (メモリを除く) を解放します。

このメソッドは、パブリック メソッド Dispose と Finalize メソッドによって呼び出されます。
Dispose は、disposing パラメータに true を設定して、プロテクト メソッド Dispose(Boolean)
を呼び出します。Finalize は、disposing に false を設定して、Dispose を呼び出します。

disposing パラメータが true の場合、このメソッドは、この Form から参照されるすべての
マネージ オブジェクトが保持しているリソースをすべて解放します。このメソッドは、参照
される各オブジェクトの Dispose メソッドを呼び出します。

Dispose は、フォームが Show メソッドを使用して表示した場合に自動的に呼び出されます。
ShowDialog などの別のメソッドを使用する場合、またはフォームがまったく表示されない場合は、
アプリケーション内で Dispose を明示的に呼び出す必要があります。
*** Unqoute ***

ちなみに、CE 版でない通常の Windows Forms アプリが Form.Dispose (Boolean) メソッドを
使っていることは間違いなさそうです。

http://surferonwww.info/BlogEngine/image.axd?picture=2019%2f7%2fFormDispose1.jpg

質問者さんの CE 版の場合はどうなってるでしょう?
返信 編集キー/


管理者用

- Child Tree -