【问题标题】:C# Circular Reference Impact on GC Performance [duplicate]C# 循环引用对 GC 性能的影响 [重复]
【发布时间】:2012-05-24 16:43:32
【问题描述】:

可能重复:
Garbage collector and circular reference

如果对象具有循环引用但未附加到任何根,因此对 GC 性能有影响吗?因此适合 GC?

在一个方向上使用弱参考会有什么好处吗?

【问题讨论】:

  • 感谢所有回复,你们都回答了很难选择“正确”答案的问题,所以我把它给了这里得分最少的人:)

标签: c# garbage-collection circular-reference


【解决方案1】:

对象有循环引用对GC性能有影响吗

没有。扫描过程在遇到已访问过的实例时停止。非圆形结构没有差异。

但没有附加到任何根,因此适合 GC?

在这种情况下,它们根本不会被访问,因此与有多少交叉链接完全无关。

【讨论】:

    【解决方案2】:

    如果无法从根到达对象,则不会遍历它们,因此循环引用不会成为问题。

    【讨论】:

    • 整洁!但是(极端情况),如果对象的唯一引用是弱引用,那么在最后一个强引用被删除时它是否没有被标记,完全不需要扫描?我想如果对其他对象进行扫描,这并不重要......
    • 我不确定你的意思。如果您的意思是在 GC 运行之前标记一个对象,那么这将涉及在整个根目录中搜索剩余的引用,而 GC 无论如何都会这样做,因此效率非常低。
    • 哦。我的印象是除了标记和清除之外还有引用计数。没关系!
    【解决方案3】:

    如果对象具有循环引用但未附加到任何根,因此对 GC 性能有影响吗?

    不。基本上,当没有强引用时,这两个对象都可以进行垃圾回收……您不必担心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多