現在、いくつかのオブジェクトに最初の破棄を実装しようとしていますが、リフレクションごとにすべてのプロパティを調べて、それらを null に設定するのは悪い考えかどうか疑問に思っていましたか?
1497 次
2 に答える
1
実装IDisposable
は、すべてのフィールドを に設定する必要があるという意味ではありませんnull
。ルート オブジェクトからアクセスできない場合は、GC が処理します。
そしてnull
、GCが参照を管理していないことに気付くまで、オブジェクトはメモリ内にあるため、設定は何もしません。
IMOは、これ以上の包括的な答えを見ることはできませんIDisposable インターフェイスの適切な使用
null を設定すると、マネージド参照が 1 つしか残っていない場合にのみ役立ちますが、必要はありませんが、カプセル化型を維持する必要がある場合は、参照を に設定しますnull
。それ以外の場合、カプセル化型自体に到達できない場合、設定null
は意味がありません。
于 2013-10-09T10:34:13.053 に答える
0
はい、それは悪い考えです。
まず、一部のプロパティはインターフェイスを実装するクラスである可能性があるため、最初にそれらのメソッドIDisposable
を呼び出す必要があります。Dispose
次に、プロパティの 1 つが COM コンポーネントに依存するクラスまたは COM コンポーネントを使用するクラスである場合、それを正しく破棄する必要があります。そうしないと、メモリ リークが発生します。
于 2013-10-09T10:25:21.150 に答える