gpt4 book ai didi

.net - 在 LINQ 查询中调用 ToList() 还是 ToArray() 更好?

转载 作者:行者123 更新时间:2023-12-03 03:54:56 24 4
gpt4 key购买 nike

我经常遇到这样的情况:我想在声明查询的地方评估查询。这通常是因为我需要对其进行多次迭代并且计算成本很高。例如:

string raw = "...";
var lines = (from l in raw.Split('\n')
let ll = l.Trim()
where !string.IsNullOrEmpty(ll)
select ll).ToList();

这很好用。 但是如果我不打算修改结果,那么我不妨调用 ToArray() 而不是 ToList()

但是我想知道 ToArray() 是否是通过首先调用 ToList() 实现的,因此内存效率比仅调用 ToList() 低>.

我疯了吗?我应该只调用 ToArray() - 安全可靠,因为知道内存不会被分配两次吗?

最佳答案

除非您只需要一个数组来满足其他约束,否则您应该使用 ToList 。在大多数情况下ToArray将分配比 ToList 更多的内存。

两者都使用数组来存储,但是ToList具有更灵活的约束条件。它需要数组至少与集合中元素的数量一样大。如果数组更大,那不是问题。然而ToArray需要将数组的大小精确调整为元素的数量。

为了满足这个约束ToArray通常比 ToList 多分配一次。一旦它有一个足够大的数组,它就会分配一个大小完全正确的数组,并将元素复制回该数组。唯一可以避免这种情况的时候是当数组的增长算法恰好与需要存储的元素数量(肯定是少数)一致时。

编辑

有几个人问我 List<T> 中有多余未使用内存的后果。值(value)。

这是一个合理的担忧。如果创建的集合生命周期很长,创建后从未被修改,并且很有可能进入 Gen2 堆,那么您最好采取 ToArray 的额外分配。在前面。

总的来说,我发现这种情况比较罕见。更常见的是看到很多ToArray立即传递给其他短期内存使用的调用,在这种情况下 ToList显然更好。

这里的关键是分析,分析,然后分析更多。

关于.net - 在 LINQ 查询中调用 ToList() 还是 ToArray() 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105990/

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