我的会话课程中有一个 ConcurrentDictionary。
Key 是一个表示管理器类的接口。
值是在此会话中用于该经理的 DataContracts 类的列表。
当我处理会话类时,我希望清除这本字典。我需要清除所有值和键,但我无法处置键 - 因为它们在类处置后仍然存在..
这够了吗 ?- 这会导致 GC 完成这项工作吗?
_myDictionary = null;
或者我需要在所有键上使用 foreach 进行迭代,并使用 Remove 清除值。
当我处理会话类时,我希望清除这本字典。
为什么?如果会话实例将符合垃圾回收条件,并且会话是唯一引用字典的对象,则字典将符合垃圾回收条件。
这够了吗 ?- 这会导致 GC 完成这项工作吗?
这几乎可以肯定是不必要的。如果其他任何东西都引用了字典,那么将该变量设置为null
将无效。如果没有其他任何东西引用字典并且会话将有资格进行垃圾收集,那么您根本不需要这样做。
唯一值得为垃圾收集而将变量设置为 null 的情况是该变量本身将继续存在(例如,它是一个不会被垃圾收集的对象中的实例变量,或者它是一个静态变量)。
请注意,顺便说一下,垃圾收集与“处理”对象完全分开。Dispose
并且IDisposable
通常与非托管资源有关,并且您的问题中没有迹象表明该概念与此处相关。