如何清理弱引用的集合?

时间:2011-12-05 16:07:17

标签: c# .net memory-management weak-references

我有一个集合,其中填充了对应用程序中对象的弱引用。 清理此类集合的过期引用的最佳方法是什么。有一个定时器对象定期查找死引用并删除它们是一个好主意吗?有没有更好的方法在C#.NET中执行此操作? 编辑:在我的场景中,该集合将为应用程序创建一次,并且在应用程序运行时将存在,因此将会增大。重要的是要保持其规模。

我更喜欢框架版本3.5或更早版本的解决方案。 感谢。

2 个答案:

答案 0 :(得分:4)

在计时器中执行此操作可能会过度,并引入并发问题来处理。

如何将死亡引用清理为其他操作的一部分呢?例如,如果它是一个列表并且排序并不重要,那么添加一个新项可以用新的一个替换它找到的第一个死引用而不是将它附加到结尾。或者,当您不希望发生某些事件经常发生时触发扫描 - 可能是在查找检索到死引用时。

答案 1 :(得分:1)

您可以启动一个在

之间交替的线程
  • 等待完整垃圾收集完成
  • 摆脱不必要的弱点。

http://msdn.microsoft.com/en-us/library/system.gcnotificationstatus.aspx

正如其他人所提到的,您必须处理涉及单独线程的任何方法的并发问题。