删除列表项而不进行任何其他引用

时间:2013-12-13 21:04:58

标签: c#

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

那么,有没有办法,如何清除只有一个参考的所有对象?或者获得参考数量?或者确定列表外是否没有其他参考?欢迎任何解决方案。

1 个答案:

答案 0 :(得分:2)

您可以使用所谓的弱列表

基本上,弱列表是GC的“忽略”引用的列表。因此,虽然列表中仍有引用,但不会计算它(取决于您使用的弱列表的实现),该项目将从列表中的某一点自动删除。

不幸的是,.NET Framework中没有直接实现弱列表。虽然您可以使用ConditionalWeakTable作为列表,但是在Web上使用WeakReference类型或类似机制的弱列表有几个示例。

<强>示例:

Is there a way to do a WeakList or WeakCollection (like WeakReference) in CLR?