タイトル : Re^2: クラスの破棄について 投稿日 : 2009/05/12(Tue) 13:57 投稿者 : ダンボ
Hongliangさん、ご回答有難うございます。2、3確認を。 >> ・マネージドクラスの破棄は = Nothing だけで良い。 →「なにもする必要が無い。参照が無ければいつか破棄される。不要な参照を消して おくだけでよい。」と理解しました。 >インスタンス自体の破棄にはなりません(そもそもマネージドオブジェクトは > 明示的にインスタンスを破棄することはできません)。 →今回実験したように、Disposeメソッドを実装して呼べば明示的にインスタンスを 破棄することが可能ですよね? >そのインスタンスがほかから参照されていなければ、そのうち GC が片付けます。 →Profileインスタンスが参照されていないことを大分しつこく確認して GC.Collect()を呼んでも回収されなかったのに、Profile.Disposeメソッドを実装して Dispose()を呼んだらメモリ増加が止まったのは何故でしょうか? Dispose()によって強制的にProfileインスタンスが破棄されたと思えるのですが。 >そもそも Finalize メソッドは明示的に呼び出せません。 →Implements IDisposable後はFinalizeメソッドを呼び出せました。 もっともAPPから呼んでも意味が無いと感じました。 フレームワークから呼び出されてアンマネージドリソースの解放忘れや その他インスタンス破棄時にどうしてもしておきたいことを記述するためにあるのですね。 (それならFinalize「イベント」のほうが理にかなっているが?) 私の作成したProfileClassはマネージドクラスですか? New()で作成すること、Disposeメソッドが無いこと、.NET Frameworkのクラスライブラリしか 使っていないのでマネージドクラスだと思えるが、そうすると ・Profileインスタンスの参照を切ってGC.Collect()を呼ぶ→回収されず ・Profile.Disposeメソッドを実装してDispose()を呼ぶ→回収された という現象が納得いかないです。 |