タイトル : Re^3: クラスの破棄について 投稿日 : 2009/05/12(Tue) 14:46 投稿者 : Hongliang
> >インスタンス自体の破棄にはなりません(そもそもマネージドオブジェクトは > > 明示的にインスタンスを破棄することはできません)。 > →今回実験したように、Disposeメソッドを実装して呼べば明示的にインスタンスを > 破棄することが可能ですよね? いいえ、インスタンスは破棄されていません。 そのインスタンスが持っているアンマネージなリソースは破棄されます。 > >そのインスタンスがほかから参照されていなければ、そのうち GC が片付けます。 > →Profileインスタンスが参照されていないことを大分しつこく確認して > GC.Collect()を呼んでも回収されなかったのに、Profile.Disposeメソッドを実装して > Dispose()を呼んだらメモリ増加が止まったのは何故でしょうか? > Dispose()によって強制的にProfileインスタンスが破棄されたと思えるのですが。 Image の参照が流出してたとか考えられますが、 いずれにせよ何をどうお書きになったのかわからないのでなんとも。 // ミニマムなソースで動作確認することをおすすめします。 Dispose は所詮ただのメソッドです。特別視されることはありません。 IDisposable は「早めに片付けた方がいいブツを持ってるから Using 構文使えるようにするね」程度の意味しかありません。 > >そもそも Finalize メソッドは明示的に呼び出せません。 > →Implements IDisposable後はFinalizeメソッドを呼び出せました。 > もっともAPPから呼んでも意味が無いと感じました。 > フレームワークから呼び出されてアンマネージドリソースの解放忘れや > その他インスタンス破棄時にどうしてもしておきたいことを記述するためにあるのですね。 > (それならFinalize「イベント」のほうが理にかなっているが?) これは私の理解不足でした。申し訳ありません。VB の場合任意に Finalize を呼べるんですね。 といっても、任意に呼び出した Finalize も所詮ただのメソッドです。特別なものではありません。 // まあその後そのオブジェクトを触るのは怖くてできませんし、 // そもそも任意に呼び出す意味はないでしょうが。 > 私の作成したProfileClassはマネージドクラスですか? というかアンマネージなクラスは VB で作ることはできません。 VB のクラスはすべてマネージです。 |