myCollection.Where(...)之间是否存在性能差异.FirstOrDefault()和myCollection.FirstOrDefault(...)
使用您正在使用的谓词填充点。
答案 0 :(得分:6)
假设我们正在谈论LinqToObjects(显然LinqToSql,LinqToWhatever有自己的规则),第一个将会如此慢一点,因为必须创建一个新的迭代器,但是你不可能注意到差异。在比较次数和检查项目数量方面,两者运行的时间几乎完全相同。
如果你担心,不会发生什么是.Where运算符将列表过滤到 n 项目,而.firstOfDefault采取第一个过滤清单。两个序列都会正确短路
答案 1 :(得分:0)
如果我们假设在两种情况下你都使用Enumerable
静态类提供的扩展方法,那么你将很难衡量两者之间的差异。
更长的形式...
myCollection.Where(...).FirstOrDefault()
...将(技术上)产生更多的内存活动(创建一个中间迭代器来处理Where()
子句)并涉及更多的处理周期。
问题是这些迭代器是 lazy - Where()
子句不会快速通过评估谓词的整个列表,它只会检查必要的项目以查找一个要通过。