| ■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 版の場合はどうなってるでしょう?
|
|