14

セッション クラスに ConcurrentDictionary があります。
キーは、マネージャー クラスを表すインターフェイスです。
値は、このセッションでそのマネージャーに使用される DataContracts クラスのリストです。

セッション クラスを破棄するときに、このディクショナリをクリアしたいと考えています。すべての値とキーをクリアする必要がありますが、クラスの破棄後もキーが存在するため、キーを破棄できません。

これで十分ですか?- これにより GC が機能しますか?

_myDictionary = null;

または、すべてのキーで foreach を繰り返し、Remove を使用して値をクリアする必要があります。

4

1 に答える 1

23

セッション クラスを破棄するときに、このディクショナリをクリアしたいと考えています。

なんで?セッション インスタンスがガベージ コレクションの対象になり、セッションがディクショナリを参照する唯一のオブジェクトである場合、ディクショナリはガベージ コレクションの対象になります。

これで十分ですか?- これにより GC が機能しますか?

ほぼ間違いなく不要です。他の何かが辞書への参照を持っている場合、その変数を に設定しnullても効果はありません。ディクショナリへの参照が他になく、セッションがガベージ コレクションの対象になる場合は、これを行う必要はまったくありません。

ガベージ コレクションのために変数を null に設定する価値があるのは、その変数自体が存在する場合だけです (たとえば、ガベージ コレクションされないオブジェクトのインスタンス変数である場合や、静的変数である場合など)。

ところで、ガベージ コレクションは、オブジェクトの「破棄」とは完全に別のものであることに注意してください。DisposeそしてIDisposable、一般的に管理されていないリソースに関係しており、あなたの質問には、その概念がここに関連しているという兆候はありません。

于 2013-06-24T09:00:37.700 に答える