gpt4 book ai didi

.net - 什么时候分配新列表比 .Clear() 现有列表更合适?

转载 作者:行者123 更新时间:2023-12-04 00:47:08 25 4
gpt4 key购买 nike

给定一个列表:

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

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

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

myList = new List<myType>();

而不是

myList.Clear();

我可以想到很多我偏爱其中一种方法的原因,但是对于何时一种方法优于另一种方法,是否有任何其他好的基准或指南?

最佳答案

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

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

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

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

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

关于.net - 什么时候分配新列表比 .Clear() 现有列表更合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com