C#循环引用对GC性能的影响
可能重复:C#循环引用对GC性能的影响,c#,garbage-collection,circular-reference,C#,Garbage Collection,Circular Reference,可能重复: 如果对象具有循环引用,但没有附加到任何根,因此适合GC,那么对GC性能有影响吗 在一个方向上有一个弱的ref有什么好处吗 如果对象具有循环引用,但没有附加到任何根,因此适合GC,那么对GC性能有影响吗 没有。基本上,当没有强引用时,这两个对象都有资格进行垃圾收集。。。您无需担心。如果无法从根目录访问对象,它们将不会被遍历,因此循环引用不会成为问题 如果对象具有循环引用,是否会影响GC性能 否。扫描过程在遇到已访问的实例时停止。非圆形结构不存在差异 但是,它们在其他方面与任何根都不相
如果对象具有循环引用,但没有附加到任何根,因此适合GC,那么对GC性能有影响吗 在一个方向上有一个弱的ref有什么好处吗 如果对象具有循环引用,但没有附加到任何根,因此适合GC,那么对GC性能有影响吗
没有。基本上,当没有强引用时,这两个对象都有资格进行垃圾收集。。。您无需担心。如果无法从根目录访问对象,它们将不会被遍历,因此循环引用不会成为问题 如果对象具有循环引用,是否会影响GC性能 否。扫描过程在遇到已访问的实例时停止。非圆形结构不存在差异 但是,它们在其他方面与任何根都不相连,因此适合GC
在这种情况下,他们将根本不会被访问,这使得有多少交叉链接完全无关紧要 干净利落!但是(边情况),如果对象的唯一引用是弱引用,那么在删除最后一个强引用时,是否可以不标记它,从而完全消除扫描的需要?我想,如果对其他物体进行扫描,这并不重要……我不知道你的意思。如果你的意思是在GC运行之前标记一个对象,那么,这将涉及到在整个根目录中搜索剩余的引用,GC无论如何都会这样做,所以这将是非常低效的。我的印象是,除了标记和扫描之外,还有参考计数。不要介意!谢谢大家的回答,你们都回答了一个很难选择“正确”答案的问题,所以我把它给了这里得分最少的人:)