1

メソッドが呼び出されたときにオブジェクトが破棄されることがわかっているため、C# の dispose メソッドは確定的なガベージ コレクション用であることがわかりました。非決定論的なガベージ コレクションの簡単な例を教えてください。通常、マルチスレッドの状況で発生しますか?

ありがとう

4

1 に答える 1

1

Dispose一般的に言えば、ガベージ コレクションはトリガーされません。代わりに、IDisposableインターフェイスは、何らかのクリーンアップが必要な項目用です。たとえば、システム上でファイル ハンドルが開かれている場合や、セマフォ ロックが解除されている場合などです。オブジェクトでガベージ コレクションが発生することを強制したい場合、できる最善の方法は、スコープ外にドロップするか、オブジェクトへの参照をドロップすることです。

特に、 を実装するオブジェクトと対話している場合は、オブジェクトへの参照を失う前に、オブジェクトで が呼び出されているIDisposableことを確認する必要があります (ブロックを使用した場合でも、オブジェクトをスコープ外にドロップする効果があります)。ブロックから外れているか、オブジェクトを明示的に呼び出しています。Dispose()usingusingDispose()

要約するIDisposableDispose()、決定論的なガベージコレクションではなく、オブジェクトにシグナルを送って、オブジェクトを自分でクリーンアップできることを知らせることです-使用は完了です。

于 2015-11-04T16:57:56.883 に答える