使用が終わったら、すべてのオブジェクトをnull
( VB.NET の場合) に設定する必要がありますか?Nothing
.NET では、インターフェイスを実装するオブジェクトのインスタンスを破棄してIDisposable
リソースを解放することが必須であると理解していますが、オブジェクトは破棄された後もまだ何かである可能性があります (したがって、isDisposed
フォームのプロパティ)。したがって、オブジェクトはメモリ内または少なくとも部分的には存在し続けることができると思いますか?
また、オブジェクトがスコープ外になると、ガベージ コレクターの次のパスに備えてコレクション対象としてマークされることもわかっています (ただし、これには時間がかかる場合があります)。
これを念頭に置いて、null
システムを高速化するように設定すると、メモリがスコープ内ではなくなったことを認識する必要がなくなるため、メモリが解放され、悪い副作用が生じるでしょうか?
MSDN の記事では、例でこれを実行することは決してありません。現在、私は害が見当たらないため、これを実行します。ただし、さまざまな意見に遭遇したため、コメントはどれも役に立ちます。
ベストアンサー1
Karl の言う通り、使用後にオブジェクトを null に設定する必要はありません。オブジェクトが を実装している場合はIDisposable
、そのオブジェクトの使用が終わったら を必ず呼び出すようにしてください( ..またはブロックIDisposable.Dispose()
で囲みます)。ただし、 を呼び出すことを忘れた場合でも、オブジェクトのファイナライザ メソッドが を呼び出すはずです。try
finally
using()
Dispose()
Dispose()
これは良い治療法だと思いました:
この
GC とその管理戦略を推測しても意味がありません。なぜなら、GC は自己調整型で不透明だからです。Dot Net Rocks で Jeffrey Richter と内部の仕組みについて良い議論がありました。Windows メモリ モデルに関する Jeffrey Richter 氏のコメントリヒターの本C# 経由の CLR第20章には素晴らしい説明があります。