在C#最佳实践中处理字典

时间:2013-06-24 08:56:43

标签: c# .net dispose

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

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

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

_myDictionary = null;

或者我需要使用foreach迭代所有键并使用Remove来清除值。

2 个答案:

答案 0 :(得分:18)

  

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

为什么呢?如果会话实例将有资格进行垃圾收集,并且会话是唯一引用字典的对象,则该字典将有资格进行垃圾收集。

  

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

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

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

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

答案 1 :(得分:-2)

您可以在此之后立即致电GC.Collect();以确保您的GC被触发。