2010-11-22 7 views
0

DOT NETのガベージコレクタはメモリリソースのみを扱うことができますか、孤立したオブジェクトが使用する他のリソースも処理できますか?ドットネットメモリの廃棄、CLRガベージコレクタは他のリソースを扱っていますか?

孤立したオブジェクトによって使用されるこれらの他のリソースを解放する方法をCLRがどのように扱うか。

+0

これは**必須**重複しますが、私はそれをオフに複製... –

+0

が重複かもしれないです質問は、私が最初にここの事を試みたことができます取得しません。 CLRのメモリ管理について学ぶためにいくつかの回答とキーワードを得ました。 – PawanS

答えて

0

.Net GCは、マネージヒープ上に置かれたオブジェクト、つまり管理対象オブジェクトのみを管理します。これらの管理対象オブジェクトは、DB接続やファイルハンドルなどのアンマネージドオブジェクトにアクセスする可能性があります。開発者は、必要に応じてIDisposableまたはFinalizeを実装することにより、これらのリソースを解放する必要があります。それ は、そのようなそれらを使用して、管理 オブジェクトが再利用されたときに が解放されなければならないファイル ハンドルやデータベース接続などのアンマネージリソースを使用する場合

タイプはファイナライズを実装する必要があります。

MSDNは、と述べています。 の補完的でより制御可能なリソースについては、IDisposableインタフェースを参照してください。

ことはここではそのためのリンクです:http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx

+0

いいえ、Finalizeを使用してアンマネージオブジェクトをリリースする正しい方法ではありません。そのためにIDisposableインターフェイスを使用する必要があります。 – Guffa

+0

決定的な廃棄を使用する場合は、IDisposableインターフェイスを使用します。ファイナライザがいつ呼び出されるかはわかりません – ppiotrowicz

+0

合意。私の間違い。可能な限りIDisposableを使用することをお勧めします。 –

4

GCは管理対象オブジェクトのみを処理します。

すべてのアンマネージリソースを手動で対処する必要があります

  1. は、アンマネージリソースを使用するすべてのタイプのIDisposableインターフェイスを実装します。
  2. IDisposableを実装するオブジェクトの使用が終了したら、Disposeメソッドを呼び出すようにしてください。これは多くの場合、ブロックusingを使用して行われます。
+0

Thanxはそのリンクを提案することができます.. – PawanS

+0

http://msdn.microsoft.com/en-us/magazine/cc163392.aspx – ppiotrowicz

関連する問題