【发布时间】:2018-02-23 10:35:54
【问题描述】:
与List 相比,与IEnumerable 相比,与IEnumerable 一起工作的许多开发人员感觉更自在(例如)。我想知道ToList() 过度使用是否会对性能产生任何影响。例如,或者,将在订购后使用ToList() 重新获取列表,即
private void ListThinger(List<T> input)
{
input = input.OrderBy(s => s.Thing).ToList();
foreach(var thing in input)
{
// do things
}
}
我的问题是:
-
ToList()方法的效率如何?假设内容是 POCO,它会创建一个新列表吗?这需要多少内存?如果它是值类型而不是 POCO,这会改变吗? - 列表大小决定效率还是列表大小不决定
ToList()的成本? - 如果一个列表被转换为
IEnumerable,然后在其上调用ToList(),它会只返回原始对象吗?
附:我知道单次使用 ToList 不会破坏任何支持,但我们正在构建一个当前受 CPU 限制的高并发系统,所以我正在寻找一些小的胜利,当扩展时,会带来很大的改进
【问题讨论】:
-
如文档所述,它创建来自
IEnumerable<T>的List<T>。所以问题1p2和3已经回答了(你的第一个问题实际上是4个问题,应该分开) -
在你的具体例子中,
ToList应该被删除,因为它没有增加任何价值(因为你所做的只是一次迭代它)。 -
你有什么理由不能自己测试这些东西?
-
ToList()非常高效。不需要时调用它是低效的。