2009-07-16 117 views
2

比方说,我有一个类集合,其中包含项目列表。在这种情况下,我应该担心释放资源吗?

public class Collection 
{ 
    private List<Item> MyList; 
    //... 
} 

我有这个Collection类的几个实例,它们都有不同的MyLists但共享一些项目。 例如:有10个项目,Collection1参考项目1-4,Collection2在其列表中包含项目2-8和Collection3 4,7,8和10。

我实现了这个如下:我有一个全局列表,其中包含任何可用的项目。在我创建一个新集合之前,我检查是否已经有这个列表中需要的项目 - 如果没有,我创建项目并将其添加到全局列表(以及当然的集合)。

我看到的问题是那些项目永远不会被释放 - 即使所有集合都消失了,它们消耗的内存仍然没有被释放,因为全局列表仍然引用它们。 这是我需要担心的事吗?如果是这样,我该怎么办?我想为全局列表添加一个计数器,以查看何时不再需要某个项目并删除其参考。

编辑: 这实际上是一个设计问题,我认为。我将放弃全局列表的想法,而是遍历所有集合,看看他们是否已经拥有所需的项目。

回答

1

它看起来有点像设计问题,你真的需要全局列表吗?

除了Jon提到的弱关联之外,您还可以定期重建全局列表(例如在删除集合后),或者只在需要时动态构建它,然后再次释放它。

您必须决定哪种方法最适合,我们这里没有足够的上下文。

2

如果全局列表需要对项目的引用,那么你不能真实地释放它们。你真的需要参考全球列表中的项目吗?你应该什么时候从逻辑上能够从全局列表中删除项目?

您可以考虑在全局列表中使用weak references,并且如果收集到指示对象,则会定期修剪WeakReference值本身。

+0

感谢提到弱引用 - 我不知道他们。但我不认为它们与我的问题有关。 – CaptainProton 2009-07-17 05:52:59

相关问题