删除没有任何其他引用的列表项

本文关键字:列表 引用 其他 任何 删除 | 更新日期: 2024-09-19 22:10:39

我有一个对象列表,多个用户可以从WebService访问它。但是,列表中的对象数量正在稳步增长,所以我需要一些内存管理。我想从列表中清除所有元素,这些元素没有被任何用户使用。然而,我不能简单地通过调用GC来实现这一点,因为仍然有一个引用(来自List的引用)。我不知道,如何获得对一个对象的引用数量。

那么,有没有一种方法,如何清除所有只有一个引用的对象?或者获取参考文献的数量?或者确定清单之外是否没有其他参考?欢迎任何解决方案。

删除没有任何其他引用的列表项

您可以使用所谓的弱列表

基本上,弱列表是GC"忽略"其引用的列表。因此,尽管列表中仍有引用,但它不会被计算在内,并且(取决于您使用的弱列表的实现)该项目将在某一点上自动从列表中删除。

不幸的是,在.NET框架中没有直接实现弱列表。有一个ConditionalWeakTable,您可以像列表一样使用它,web上有几个使用WeakReference类型或类似机制的弱列表示例。

示例:

有没有一种方法可以在CLR中执行WeakList或WeakCollection(如WeakReference)?