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