何时更适合分配新列表而不是.Clear()现有列表?

时间:2011-08-22 17:51:31

标签: .net performance list clear construct

给出一个清单:

List<myType> myList = new List<myType>();

在运行时修改集合内容....

要清除列表,我似乎有建议使用

的示例
myList = new List<myType>();

而不是

myList.Clear();

我可以想出一些原因,为什么我更喜欢一个而不是另一个,但是对于一种方法何时优于另一种方法,还有其他任何好的基准或指导方针吗?

2 个答案:

答案 0 :(得分:3)

如果列表很大(80千字节或更多),那么它将存储在large object heap上。 LOH的官方指南是尽可能重复使用对象,以减少堆碎。 LOH不像常规堆那样被压缩。

对于较小的列表,我发现创建一个新列表通常比调用Clear更快。这不是总是是真的,所以你可能最好在你的应用程序中以两种方式测试它。

如果您致电Clear,它只会将列表中的所有项目设置为默认值,并将Count设置为0.它不会更改列表的容量。因此调用Clear不会改变分配给集合的内存量。如果您要清除列表并缩小其大小,请致电Clear,然后TrimExcess

如果你不小心,你会遇到的一个问题是别名。如果您有多个引用同一列表的对象,则创建新列表不会删除其他引用。那么你最终得到两个列表。只是想一想。

总而言之,我认为没有特别的“最佳实践”。我发现有时使用Clear会很好,有时最好分配一个新列表。

答案 1 :(得分:2)

当您绑定到列表对象并从其他代码区域引用它时 - 然后使用clear方法。如果您没有引用但未绑定,则创建新对象将是合适的。