7

ファイナライズ内で管理対象リソースを解放しないことが推奨される理由について考えてきました。http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspxでコード例を参照し、文字列「Dispose(bool disposed)executes in twodifferentscenarios」を検索して読んでください。コメント、あなたは私が何を意味するかを理解するでしょう。

私が考えることができる唯一の可能性は、ファイナライザーがいつ呼び出されるかを予測することができないという事実とおそらく関係があるということです。誰かが正しい答えを知っていますか?

ありがとう、mishal

4

2 に答える 2

11

ファイナライザーから別のオブジェクトを参照している場合、そのオブジェクトが既にファイナライズされているかどうか、およびファイナライズされた場合の動作わかりません。(現在のCLRが複数のファイナライザースレッドを実行しているかどうかはわかりませんが、別の恐ろしい可能性は、ファイナライザーの実行時にファイナライズの過程にあることです。)

ファイナライザーで行う必要があるのは、直接所有している管理されていないリソースを解放することだけです。リソースを所有する他のマネージドタイプを参照している場合は、ファイナライザーでそれらのジョブを実行させます。

于 2010-04-22T06:32:04.077 に答える
2

あなたは頭に釘を打ったと思います。Object.Finalizeのドキュメントの文言を見ると、See the IDisposable interface for a complementary and more controllable means of disposing resources.「補完的」とは「それを行う別の方法」を意味し、制御可能であることを意味します。まさにあなたが言ったことです。

編集:そしてジョンスキートが言ったこと。複数のファイナライザースレッドの概念により、私は眠らないか、今夜は非常に悪い夢を見ることはありません。

于 2010-04-22T06:33:50.670 に答える