C#中使用弱引用对垃圾回收的成本是多少?

7
另一个问题中,Stephen C表示:

第二个问题是使用弱引用会有运行时开销。显而易见的成本是创建弱引用并调用它们的get方法。不太明显的成本是每次GC运行时需要做更多的额外工作。

那么对于弱引用而言,GC的成本到底是什么呢?需要做哪些额外工作,这一点有多大影响?我可以进行一些猜测,但是我真正感兴趣的是具体的机制。
1个回答

3
请查看Jeffrey Richter关于.NET内存管理的文章,它会让事情变得更清晰一些。传送门

2
+1 真不错的文章。 基本上,弱引用的开销只有在你有很多弱引用的情况下才会存在,因为垃圾回收器需要检查弱引用的目标是否将被清理,如果是这种情况,就将弱引用的目标设置为null。无论如何,如果有人在他们的应用程序中有那么多弱引用,我会觉得很奇怪。通常情况下,你不需要任何弱引用。 - Stormenet
@Stormenet 嗯,有时候使用 ConditionalWeakTable(T) 将元数据附加到任意对象上,而无需担心在这些任意对象被垃圾回收时清理元数据表中的条目,这可能非常方便。根据您所做的事情,我想创建 很多 这样的对象可能会相当容易。 - binki
存档链接 https://web.archive.org/web/20081220175048/http://msdn.microsoft.com/en-us/magazine/bb985011.aspx - Baggers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接