我有一个可变类,它有一个私有List< T>里面的字段.在我的类的Reset()方法中,我应该使用其Clear()方法清除列表还是只为其字段分配一个新列表?请注意,该列表不是公共的,仅供类本身使用.因此,分配新列表应该使旧的列表无法访问.自从Clear()方法
is an O(n) operation以来,我想知道在它上面分配新列表的缺点是什么.
解决方法
我能想到的唯一缺点是,如果你需要再次使用列表,你将不得不为它分配新的空间.
取消它只会使列表及其内容(假设没有其他参考)符合GC的条件.清除它会删除项目,但会分配内存.
就个人而言,即使我再次需要它,我倾向于使该东西无效,大小将完全改变.
更新:与下面的注释有关,您声明这些对象将在对象池中进行管理.我建议创建一个小的性能分析控制台应用程序来获得最终答案.现在讨论将介绍您的实现细节和对象池的预期用法,这可能很容易改变答案.
一般来说,如果你的列表长度不变且总是需要,我会使用Clear来避免为列表分配新的内存.如果列表长度容易发生很大的变化,或者使用有时很少 – 我宁愿将其归零以便回收内存并通过列表的惰性实例化获得一些小的好处.