3

给定一个列表:

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

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

为了清除列表,我似乎有一些建议使用的例子

myList = new List<myType>();

而不是

myList.Clear();

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

4

2 回答 2

3

如果一个列表很大(80 KB 或更多),那么它将被存储在大对象堆上。LOH 的官方指导是尽可能多地重用对象,以减少堆碎片。LOH 不像常规堆那样被压缩。

对于较小的列表,我发现创建一个新列表通常比调用Clear. 这并不总是正确的,因此您可能最好在应用程序中以两种方式对其进行测试。

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

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

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

于 2011-08-22T18:00:12.703 回答
2

当您绑定到列表对象并从其他代码区域引用它时,请使用 clear 方法。如果您没有引用并且未绑定,那么创建一个新对象将是合适的。

于 2011-08-22T17:54:27.387 回答