タイトル : Re^3: クラスの破棄について 投稿日 : 2009/05/12(Tue) 18:06 投稿者 : YuO
> ・Profileインスタンスの参照を切ってGC.Collect()を呼ぶ→回収されず > ・Profile.Disposeメソッドを実装してDispose()を呼ぶ→回収された > という現象が納得いかないです。 ファイナライザが存在する場合, 最初のガベージコレクトにおいてファイナライザの呼び出しがなされ, 2度目のガベージコレクトによってメモリが回収されます。 このため,ファイナライザが存在する場合, 第1世代のガベージコレクトが行われないとメモリは回収されませんし, 都合2度GC.Collectを呼び出さないとメモリは回収されません。 さらに,世代が上がるため,回収の行われる可能性が低くなっています。 通常のDisposeの実装では,GC.SuppressFinalizeの呼び出すことにより, 上記の動作を抑制します。 つまり,Disposeの呼び出しにより第0世代のガベージコレクトにおいて メモリが回収されるようになります。 |