2

假设我有一个包含项目列表的类 Collection。

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

我有这个 Collection 类的几个实例,它们都有不同的 MyLists 但共享一些项目。例如:有 10 个 Item,Collection1 引用 Items 1-4,Collection2 在其 List 中有 Items 2-8,Collection3 有 4、7、8 和 10。

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

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

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

4

2 回答 2

2

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

您可以考虑在全局列表中使用弱引用WeakReference,如果已收集到它们的引用,则定期修剪值本身。

于 2009-07-16T10:29:34.760 回答
1

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

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

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

于 2009-07-16T11:14:24.763 回答