我有一个可变类,其中包含一个私有的
List<T>
字段。在我的类的Reset()
方法中,我应该使用其Clear()
方法清除列表,还是只需分配一个新列表给它的字段?请注意,该列表不是公共的,只由类本身使用。因此,分配一个新列表应该使旧列表无法访问。由于Clear()
方法 是O(n)操作,我想知道仅分配新列表的缺点是什么。
Clear
方法。如果之后对列表不再关心或者它可能会大量缩小,则使用list = null; list = new List<T>()
。在任何一种情况下,垃圾回收器都会收集 x 个对象,所以这并不重要。任何潜在的性能差异都在 O(n) 迭代与列表增长重新分配之间的差异。 - Adam HouldsworthList<T>
,那么我会更倾向于使用Clear
,因为它更能表达意图。在池化中,您希望项目长时间存在,因为它返回到池中。将列表置空意味着 GC 必须回收先前列表的内存,然后获取下一个块以供新列表使用。我所说的分配是指除非您指定列表容量,否则它会在需要时自动增长。既然您想管理池,我建议根据您的池需求自己进行清空与Clear
的性能分析。Stopwatch
在这里很有帮助。 - Adam Houldsworth