假设我有一个包含项目列表的类集合。
public class Collection
{
private List<Item> MyList;
//...
}
我有几个这个Collection类的实例,它们都有不同的MyLists但共享一些Items。 例如:有10个项目,Collection1引用项目1-4,Collection2在其列表中有项目2-8和Collection3 4,7,8和10。
我按如下方式实现了这个:我有一个全局List,它包含任何可用的项目。在我创建一个新的Collection之前,我检查这个列表中是否已经有我需要的项目 - 如果不是,我创建Item并将其添加到全局List(当然还有Collection)。
我看到的问题是那些项永远不会被释放 - 即使所有集合都消失了,它们消耗的内存仍然没有被释放,因为全局列表仍然引用它们。 这是我需要担心的吗?如果是这样,我该怎么办?我想到在全局列表中添加一个计数器,以查看何时不再需要Item并删除它的引用。
修改 我认为这实际上是一个设计问题。我将放弃全局列表的概念,而是遍历所有集合,看看它们是否已经拥有所需的项目。
答案 0 :(得分:2)
如果全局列表需要对项目的引用,那么您无法实际释放它们。您是否真的需要引用全局列表中的项目?您何时逻辑能够从全局列表中删除项目?
您可以考虑在全局列表中使用weak references,如果已经收集了对象,则可以定期修剪WeakReference
值。
答案 1 :(得分:1)
看起来有点像设计问题,你真的需要全局列表吗?
除了Jon提到的弱引用之外,您还可以定期重建全局列表(例如删除集合后)或仅在需要时动态构建它并再次发布。
您必须决定哪种方法最合适,我们这里没有足够的上下文。