IDisposable の使用方法のパターンに従って、Microsoft はファイナライズを使用してアンマネージド ソースをリリースすることを提案しています。 http://msdn.microsoft.com/en-us/library/system.idisposable%28v=VS.80%29.aspx
しかし、管理されたソースをファイナライズで解放するコードを書くとどうなるでしょうか? つまり、管理されたソースを解放するために GC 呼び出しが完了すると、何が起こるでしょうか?
IDisposable の使用方法のパターンに従って、Microsoft はファイナライズを使用してアンマネージド ソースをリリースすることを提案しています。 http://msdn.microsoft.com/en-us/library/system.idisposable%28v=VS.80%29.aspx
しかし、管理されたソースをファイナライズで解放するコードを書くとどうなるでしょうか? つまり、管理されたソースを解放するために GC 呼び出しが完了すると、何が起こるでしょうか?
これは一般的に悪い習慣です。ファイナライザー コードでは、オブジェクトとその管理対象リソースの状態に依存することはできません。それらは既に収集または破棄/ファイナライズされている可能性があります。また、CLR が を呼び出す順序に依存することはできませんFinalize
。
ファイナライザーで管理されているものをリリースする理由 (または、より良い方法) は何ですか? 現在のオブジェクトが所有するものはすべて、この時点ですでにガベージと見なされており、ガベージ コレクターの次の実行で収集されます。また、カレントが所有していないものはすべて、他の何かがまだそれを参照している可能性があるため、解放できません。
マネージド コードの Dispose/Finalize を記述する必要はありません。bcz オブジェクトが参照されなくなると、CLR によって削除されます。Dispose メソッドは、ファイル ハンドラーやデータベース コマンドなどのアンマネージ コード用に作成されます。