14

我的会话课程中有一个 ConcurrentDictionary。
Key 是一个表示管理器类的接口。
值是在此会话中用于该经理的 DataContracts 类的列表。

当我处理会话类时,我希望清除这本字典。我需要清除所有值和键,但我无法处置键 - 因为它们在类处置后仍然存在..

这够了吗 ?- 这会导致 GC 完成这项工作吗?

_myDictionary = null;

或者我需要在所有键上使用 foreach 进行迭代,并使用 Remove 清除值。

4

1 回答 1

23

当我处理会话类时,我希望清除这本字典。

为什么?如果会话实例将符合垃圾回收条件,并且会话是唯一引用字典的对象,则字典将符合垃圾回收条件。

这够了吗 ?- 这会导致 GC 完成这项工作吗?

这几乎可以肯定是不必要的。如果其他任何东西都引用了字典,那么将该变量设置为null将无效。如果没有其他任何东西引用字典并且会话将有资格进行垃圾收集,那么您根本不需要这样做。

唯一值得为垃圾收集而将变量设置为 null 的情况是该变量本身将继续存在(例如,它是一个不会被垃圾收集的对象中的实例变量,或者它是一个静态变量)。

请注意,顺便说一下,垃圾收集与“处理”对象完全分开。Dispose并且IDisposable通常与非托管资源有关,并且您的问题中没有迹象表明该概念与此处相关。

于 2013-06-24T09:00:37.700 回答