清除私人collections或将其设为空?

我有一个可变类,里面有一个私有的List字段。 在我的类的Reset()方法中,我应该使用其Clear()方法Clear()列表还是仅为其字段分配一个新列表? 请注意,该列表不是公共的,仅供类本身使用。 因此,分配新列表应该使旧的列表无法访问。 由于Clear()方法是一个O(n)操作 ,我想知道只是在它上面分配一个新列表的缺点是什么。

我能想到的唯一缺点是,如果你需要再次使用列表,你将不得不为它分配新的空间。

取消它只会使列表及其内容(假设没有其他参考)符合GC的条件。 清除它会删除项目,但会分配内存。

就个人而言,即使我再次需要它,我倾向于使该东西无效,大小将完全改变。

更新:与下面的注释有关,您声明这些对象将在对象池中进行管理。 我建议创建一个小的性能分析控制台应用程序来获得最终答案。 现在讨论将介绍您的实现细节和对象池的预期用法,这可能很容易改变答案。

一般来说,如果你的列表长度不变且总是需要,我会使用Clear来避免为列表分配新的内存。 如果列表长度容易发生很大的变化,或者使用有时很少 – 我宁愿将其归零以便回收内存并通过列表的惰性实例化获得一些小的好处。

那么为什么空呢呢? 这将为您提供技巧,让旧列表保留在堆上以进行垃圾回收,而访问列表的现有方法可以继续在新的空列表上运行:

 this.FooList = new List(); 

Reset调用之后,我将使对象处于调用构造函数后的状态。

如果构造函数创建了一个新的空List那么就这样做。 如果没有使它为null