2017-01-24 4 views
0

System.Net.NetworkCredentialにはDisposeメソッドがありません。このクラスを使用して作成されたオブジェクトを適切に処理するための最良の方法は何ですか?c#System.Net.NetworkCredential

JamesNT

+4

? –

+0

「処分」とは、「IDisposable」を実装していないものを意味しますか? –

答えて

1

あなたがそれを使用して行われたときにオブジェクトは、それを「処分」する適切な方法をIDisposableを実装していない場合、それはスコープの外に出るようにすることです。

IDisposableは、オブジェクトが保持している管理対象外のリソースをクリーンアップできるように設計されています。オブジェクトに管理対象リソースのみが含まれている場合は、それを破棄する必要はありません。すべてがガベージコレクタによってクリーンアップされます。 MSDNから

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

は、明示的にガベージコレクタと 一緒に、アンマネージリソースを解放するために のDisposeメソッドにこのインタフェースを使用してください。オブジェクトの消費者は、オブジェクトがもはや必要でないときに このメソッドを呼び出すことができます。あなたはそれが実際に処分が必要となると思わせるものを何IDisposable.Disposeがない場合

+0

そして、これはあります – JamesNT

2

あなただけ試してみるの最後にセクション内のNULLへのオブジェクト参照を設定することができます。

var myCredential = new NetworkCredential(); 

try 
{ 
    //Do stuff here 
} 
finally 
{ 
    myCredential = null; 
} 

しかし、.NETガベージコレクションは、すぐにそれがスコープ外になると、コレクションのためのあなたのオブジェクト参照をマークする必要があります。

+1

実際、ランタイムは最後の使用後にオブジェクトを収集できます。それをtry/finallyでラップし、作成している変数にnullを代入することで、より長い時間は回収できなくなります。このようにすると、オブジェクトのコレクションがより確定的になるかどうかはわかりません。 –

+0

ありがとう...面白いです!私は午前1時でプログラミングのものに取り組んでする必要がない理由 – Wheels73