我有一个对象列表,可以由WebService中的多个用户访问。但是,列表中的对象数量正在稳步增长,因此我需要一些内存管理。 我想清除列表中的所有元素,这些元素不被任何用户使用。但是,我不能简单地通过调用GC来执行此操作,因为仍然有一个引用(List中的引用)。我不知道如何获得对象的引用数量。
那么,有没有办法,如何清除只有一个参考的所有对象?或者获得参考数量?或者确定列表外是否没有其他参考?欢迎任何解决方案。
答案 0 :(得分:2)
您可以使用所谓的弱列表。
基本上,弱列表是GC的“忽略”引用的列表。因此,虽然列表中仍有引用,但不会计算它(取决于您使用的弱列表的实现),该项目将从列表中的某一点自动删除。
不幸的是,.NET Framework中没有直接实现弱列表。虽然您可以使用ConditionalWeakTable作为列表,但是在Web上使用WeakReference
类型或类似机制的弱列表有几个示例。
<强>示例:强>
Is there a way to do a WeakList or WeakCollection (like WeakReference) in CLR?