清除私人收藏或将其设为空?

Şaf*_*Gür 7 c# collections null garbage-collection

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

Ada*_*rth 5

我能想到的唯一缺点是,如果你需要再次使用这个列表,你必须为它分配新的空间.

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

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

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

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