1. ホーム
  2. c#

[解決済み] .NETで使用後にオブジェクトをNull/Nothingに設定する方法

2022-04-13 01:52:01

質問

すべてのオブジェクトを null ( Nothing VB.NETの場合)を一旦終了させるのですか?

を実装したオブジェクトのインスタンスは、.NETではディスポーザブルにすることが必須であると理解しています。 IDisposable インターフェイスを使用して、リソースを解放することができます。 isDisposed プロパティを使用することができます。

また、オブジェクトがスコープ外になると、ガベージコレクタの次のパスのために収集のためにマークされることも知っています(ただし、これには時間がかかる場合があります)。

これを踏まえて null また、悪い副作用はありますか?

MSDN の記事では、例でこのようなことをすることはありませんし、現在、私はこのようなことをすることができません。 弊害はありますか?しかし、私は様々な意見に出くわしたので、どんなコメントでも役に立ちます。

どのように解決するのですか?

Karlの言う通り、使用後にオブジェクトをnullに設定する必要はありません。もしオブジェクトが IDisposable を呼び出すようにすればよい。 IDisposable.Dispose() そのオブジェクトを使い終わったとき、( try .. finally または using() ブロック)。しかし、たとえあなたが Dispose() オブジェクトのファイナライザーメソッドは Dispose() を使用します。

これは良い治療法だと思いました。

IDisposableを掘り下げる

そしてこれ

IDisposableを理解する

GCとその管理戦略を推測しようとすることに意味はありません。なぜなら、GCはセルフ・チューニングが可能で不透明だからです。Dot Net RocksでJeffrey Richterと内部構造について良い議論がありました。 ジェフリー・リヒターによるWindowsメモリモデルの解説 と リチャーズの本 C#によるCLR 第20章に素晴らしい解説があります。