2011-10-25 11 views
1

は、このような処分を呼び出すために、すでにそのコンストラクタでSuppressFinalizeと呼ばれるようにはポイントが存在しないのDataTable /それを使用しての使用など、いくつかのクラスがあります。だから、(処分が早い解放するためであるが、解放するためには何もないので)あなたのdispose呼び出しが役に立たないように、どのクラスがSuppressFinalizeをコンストラクタで呼び出しますか?

、私はそのようなクラスのリストや反射によって、そのようなクラスのリストを見つける方法を知りたいですか?

+1

ギデオンの答えは、あなたにとって有用であると認められたとして、あなたはそれをマークする必要があり、あなたの質問に答える助けた場合。それを行うには、答えの左側にあるチェックマークを押します。それがあなたにとって有用でない場合は、より明確なことを尋ねるか、質問に詳細を追加する必要があります。私はあなたが受け入れられた答えを持っていないあなたのすべての質問でこれを行うことをお勧めしたいと思います。 –

答えて

6

あなたの質問は無効と仮定します。 SuppressFinalizeを呼び出すことは、Disposeの有用性には関係しません。 Disposeメソッドは、明示的にまたはブロックusingを介して、呼び出すときに書き込まれた内容を引き続き行います。

通常、処分はSupressFinalizeを呼び出しますが、処分はあなたが一般的なのDisposeパターンをたどるとき、ファイナライザーから実行していたコードを実行するためです。コードはすでに実行されているので、ファイナライズの必要はありません。これは比較的高価な操作です。したがって、DisposeはSupressFinalizeを呼び出します。

+0

しかし、stackoverflowとインターネットの両方で、実際には、そのベースクラスからIDisposableを取得したにもかかわらず、datatableのためにdisposeを呼び出す必要はないという多くの答えがあります。呼び出されるべきかどうか?または私は実際にIDisposableでそのクラスの代わりに呼び出されたdisposeを実際に必要としないクラスを尋ねるべきですか? –

+2

@illmgこれはより良い質問ですが、依然としてトリビアとしてのみ役立つかもしれません。一般的に、IDisposableを実装する場合は、実装の詳細を掘り下げて、本当に必要かどうかを調べるのではなく、処分します。これにより、処分が必要な類似のクラスまたはインターフェイスの実装に切り替えるバグを防ぐこともできますが、呼び出しを追加することは忘れてしまいます。 –

関連する問題