【发布时间】:2015-07-25 09:06:07
【问题描述】:
如果我有以下来自某个存储库的 IEnumerable 列表。
IEnumerable<SomeObject> items = _someRepo.GetAll();
什么更快:
items.Count(); // Using Linq on the IEnumerable interface.
或
List<SomeObject> temp = items.ToList<SomeObject>(); // Cast as a List
temp.Count(); // Do a count on a list
Linq Count() 是否比将 IEnumerable 转换为 List 然后执行 Count() 更快或更慢?
更新:将问题稍微改进为更现实的场景。
【问题讨论】:
-
Count() 和 ToList() 方法中不需要
。 -
ToList()不会投射到列表中。它创建一个包含可枚举项的列表,即使输入的可枚举项已经是一个列表。请参阅reference source。所以Count()会更快,因为它不会创建复制列表。 -
我不认为这是重复的 - 作者没有
List<T>或T[]数组,它有IEnumerable<T>并在其上调用ToList以获取Count属性使用权。调用ToList可能比从 LINQ 调用Count()方法要昂贵得多。
标签: c# performance linq ilist