垃圾收集和引用C#

我有一个设计,我不确定垃圾收集是否会正确发生。
我有一些神奇的苹果,有些是美味的,有些是坏的。

我有一本字典: BasketList = Dictionary
(篮子清单)。

每个Basket对象中都有一个Apple ,每个Basket存储一个对象AppleSeperation的引用。

AppleSeperation存储2个词典, YummyApples = BadApples = Dictionary ,所以当我被问到苹果在哪里时我知道。

Apple对象存储BasketsImIn = Dictionary ,它指向Basket和Shops,以及Apple in Basket。

我的问题是,如果我从BasketList删除一个篮子并确保从BadApples和/或YummyApples删除Apple, BadApples垃圾收集是否会正常发生,或者是否会出现一些混乱的引用?

你仔细思考这个问题是正确的; 拥有各种引用不仅会影响垃圾收集,还会影响应用程序的正常运行。

但是,只要您小心删除所有已设置的引用,并且没有任何其他独立变量保留引用,垃圾收集器就会完成其工作。

GC在收集未引用的对象时实际上相当复杂。 例如,它可以收集两个相互引用的对象,但在应用程序中没有其他“活动”引用。

有关垃圾回收的基础知识,请参见http://msdn.microsoft.com/en-us/library/ee787088.aspx 。

从上面的链接,当垃圾收集发生时……

  1. 系统具有较低的物理内存。
  2. 托管堆上已分配对象使用的内存超过可接受的阈值。 这意味着托管堆上已超出可接受内存使用量的阈值。 在该过程运行时不断调整该阈值。
  3. 调用GC.Collect方法。 几乎在所有情况下,您都不必调用此方法,因为垃圾收集器会持续运行。 此方法主要用于独特的情况和测试。

如果您正在进行正确的清理,那么您不必担心!