2008-09-08 13 views

答えて

4

通常はありません。

ガベージコレクタはルートオブジェクトを検索し、いずれのオブジェクトもルートされていない場合、循環依存がコレクションを妨げません。

警告があります。オブジェクトAにオブジェクトBへの参照があり、オブジェクトBが破棄されている場合は、その関係をクリーンアップしたい場合があります。そうしないと、リークが発生する可能性があります。このサーフェスがイベントハンドラ内で最も一般的な場所です(A-> Bからの参照は、Aのイベントに登録されているため、Bが制御するものです)。この場合、たとえAがまだ根づいていれば、処分されていてもBを収集することはできません。

+0

イベントと廃棄は実際には関連していません。 「処分された」とは、「収集された」という意味であれば、そうです。そうでなければ、あなたの表現はあまり明確ではありません。 –

+0

リファレンスに関するこの回答に(遅く)警告を追加するにはリークにつながる可能性のあるシナリオはごくわずかしかなく、実際にはほとんどが「認識」されているリークは実際にはありません。このMSDNブログには、非常に良い書き方があります:http://blogs.msdn.com/b/davidklinems/archive/2005/11/16/493580.aspx –

5

クラスにDisposeメソッドがある場合、それを呼び出すのがベストプラクティスです。その理由は の後ろには、呼び出されたときにDisposeが実行されますが、オブジェクトを に設定すると、GCのFinalizeキューにエントリが追加されるだけで、GCがいつ実行されるかは決めることができません。

ガベージコレクタによって自動的に再利用されるため、管理リソース(配列など)のみを使用する型に対してDisposeメソッドを実装すると、パフォーマンス上のメリットはありません。 Disposeメソッドは、主にネイティブリソースを使用する管理オブジェクトおよび.NET Frameworkに公開されているCOMオブジェクトで使用します。ネイティブリソース(FileStreamクラスなど)を使用する管理オブジェクトは、IDisposableインターフェイスを実装します。

「使用する」構造を使用することを採用しているDisposeを呼び出す優雅な手段。あなたが構築に精通していない人にとっては、操作の間に例外がスローされても、IDisposableを実装するインスタンスに対してDispose()を暗黙に呼び出す手段を提供します。以下の構築物の使用例である:前の例で

using(DisposableClass dc = new DisposableClass()) 
{ 
    dc.PerformActionOnUmanagedResources(); 
    dc.PerformAnotherActionOnUmanagedResources(); 
} 

を例外PerformActionOnUmanagedResources()メソッドでスローされた場合PerformAnotherActionOnUmanagedResources()メソッドが処理されないであろうが、使用ブロックはまだ意志暗黙のうちに、dcのDisposeメソッドが呼び出され、アンマネージド・リソースの実体が保証されます。

3

disposeメソッドの目的は、基底クラスのdisposeメソッドを呼び出すことによって、クラスに関連付けられたすべてのリソースと親のクラスを解放することです。それは物事が少し明確にする必要があり、このリンクの読み取りを持っている:

http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

1

あなたは、「ラージオブジェクト」とはどういう意味ですか?

IDisposableを実装しているメンバーであれば、少なくともDispose()を呼び出す必要があります。

1

他の人が指摘しているように、必ずしも必要ではありませんが、デバッグには役立ちます。

ポインタを使ってオブジェクトを終了すると、それをnullに設定すると、そのオブジェクトの再利用を防ぐことができます(null参照例外が発生します)。

削除されたC++デストラクタのメンバポインタをnullに設定するのと同じロジックが適用されます。これを行うにはにはが必要ですが、後でトラブルシューティングに役立ちます。

0

使い捨てメソッドの目的について少し考えてみましょう。通常、ガベージコレクション中に解放されないリソースがあるためです。これは通常、データベース接続やファイルハンドルのようなものです。したがって、Disposeメソッドが呼び出されると、それらのリソースはすべて解放されます。

私は、ヌルを浮かべることは、 "ゾンビ"オブジェクトを浮かべることがより有害であると主張したいと思います。

関連する問題