問題は、なぜ電話をかける必要があるのかということです。Dispose()
いくつかのオブジェクトに?オブジェクトがスコープ外に出たときになぜガベージコレクタがオブジェクトを収集しないのですか?私はそれがそのように実施された理由を理解しようとしています。なるほど、簡単ではないでしょうDispose()
ガベージコレクタがスコープ外のオブジェクトを収集したときに呼び出されました。
ガベージコレクタは非決定的です - それはでオブジェクトを収集しますいくつかのポイントそれらがもはや参照されなくなった後、しかしそれがタイムリーに起こることが保証されていません。これには、循環的な依存関係を許可することや、カウンタをインクリメントおよびデクリメントしないというパフォーマンス上の利点など、参照カウントよりもさまざまな利点があります。
しかし、それはリソースにとってどれがすべきタイムリーな方法(データベース接続、ファイルハンドルなど - メモリ以外のほとんど)でクリーンアップする必要がありますが、それでもリソースを明示的に破棄する必要があります。のusing
ステートメントは、これをかなり簡単にします。
Disposeは、管理されていないリソース(データベース接続用ラッパー、古いCOMライブラリなど)をクリーンアップするために使用されます。
編集する詳細については、いくつかのMSDNリンク:
http://msdn.microsoft.com/en-us/library/b1yfkh5e(VS.71).aspx
http://msdn.microsoft.com/en-us/library/0xy59wtx(VS.71).aspx
ガベージコレクタがオブジェクトを回収するときにアンマネージドリソースで何が起こるかを指定するには、保護されたFinalize()メソッドをオーバーライドする必要があります。http://msdn.microsoft.com/en-us/library/system.object.finalize(VS.71).aspx