2012-04-09 9 views
1

私はDispose()クラスをIDisposableから継承する必要があることを知っていますが、私のアプリケーションではクラスがIDisposableを継承していないので、単にfooObjectにnullを代入すればリソースの割り当てを解除しますか?ObjectOfFoo = nullとObjectOfFoo.Dispose()の相違点

ありがとうございます! (あなたがはるかに長く生きるオブジェクトにフィールドをリリースしている場合は、主に便利)nullに割り当て

答えて

3

は、通常は有益ではない - それは確かにコレクションを強制しません。 Dispose()はコレクションとは無関係で、必要なときに使用します。プロンプトDispose()(管理されていないリソース、接続など)が必要なリソースがない場合は、IDisposableを実装する必要はありません。

GCを単独のままにしておきます - 選択すると効率的に収集されます。「通常の」.NETでは世代別スキームを意味します。短命オブジェクトは非常に効率的に収集できます。

0

オブジェクトが自分のクラスであり、その中にディスプロセス・メカニズムを入れてnull値を代入するのではなく、それを廃棄すると、メモリーとパフォーマンスをより詳細に制御できるため、より優れています。

オブジェクトを明示的に破棄することはまったく悪いことではありません。 GCはそのようなことを行いますが、オブジェクトがスコープから外れてガベージコレクションの準備が整うまで待ちます。これには時間がかかることがありますので、無駄な状態になっているオブジェクトを処分することをお勧めします。

+3

処分するものがない場合は、「IDisposable」を実装するのは何ですか? –

+0

オブジェクトを明示的に破壊することは.NETでは可能ではありませんので、それが良いか悪いのかを議論するのは難しいです。ここにいくつかのメリットがあるかもしれませんが(管理されていないリソースなどを処理する場合)、OPが記述しているようには聞こえません**いくつかの非常に特殊なシナリオに関連しています。 –

関連する問題