3

こんにちは、オブジェクトが Disposable で、何が優れているか知りたいです。

this.object.Dispose();

また

this.object = null;

また

this.object.Dispose();
this.object = null;
4

4 に答える 4

12

Disposeusingブロック内のオブジェクトを使用し、フレームワークに破棄させる方法がさらに優れています。

対象: this.object.Dispose();vsthis.object = null;

オブジェクトを に設定すると、null管理されていないリソースが未処理のままになる可能性があります。持つことの全体的な目的は、管理されていないリソースがIDisposable使用後に確実に破棄されるようにすることです。

参照: IDisposable - MSDN

このインターフェイスの主な用途は、管理されていないリソースを解放することです。ガベージ コレクターは、管理対象オブジェクトが使用されなくなると、そのオブジェクトに割り当てられたメモリを自動的に解放します。ただし、ガベージ コレクションがいつ発生するかを予測することはできません。さらに、ガベージ コレクターは、ウィンドウ ハンドルや開いているファイルやストリームなどのアンマネージ リソースを認識しません。

于 2013-08-19T15:41:08.327 に答える
2

null 値をチェックして適切に応答する他のコードがない限り、オブジェクトを に設定する必要Disposeはありません。null

于 2013-08-19T15:42:04.323 に答える
0

object.Dispose() または object = null

処分とは?IDisposable を実装する型には通常、このメソッドがあります (ただし、独自のパブリック メソッドを作成できます)。

public class Test:IDisposable
{
    public void Dispose()
    {
           //release resources here managed and unmanaged
    }
}

IDisposable を実装したので、最善の方法は

using (Test t = new Test())
{
}

ブロックフレームワークを使用してこれを行うと、すべてのリソースが処理されます。心配する必要はありません。また、オブジェクトのファイナライザー メソッドが Dispose() を呼び出す必要がある場合でも、

代わりに、あなたも行うことができます

Test t = new Test();
t.Dispose();

それをnullに設定するのはどうですか?

Test t = new Test();
t = null; 

参照されたオブジェクトにはアクセスできなくなり、ガベージ コレクション (マネージド リソース) を実行できるようになりました。管理されていないリソースを自分で処理する必要があります。

于 2013-08-19T15:47:00.613 に答える