Possible Duplicate:
LINQ extension methods - Any() vs. Where() vs. Exists()
给定内存中的对象列表,我运行以下两个表达式:
myList.where(x => x.Name == "bla").Any()
对比
myList.Any(x => x.Name == "bla")
后者总是最快的,我相信这是由于 Where 枚举了所有项目。但是当没有匹配项时也会发生这种情况。
虽然我不确定确切的原因。是否有任何情况下这种观察到的性能差异不会出现这种情况,例如查询 Nhib?
干杯。
带有谓词的 Any()
可以在没有迭代器的情况下执行其任务 (yield return
)。使用 Where()
创建迭代器,这会增加性能影响(尽管非常小)。
因此,就性能而言(稍微),您最好使用采用谓词 (x => x.Name == "bla"
).就我个人而言,我发现它也更具可读性......
旁注,Where()
不一定枚举所有元素,它只是创建一个迭代器,它将根据请求遍历元素,因此调用 Any Where()
之后的 ()
将驱动迭代,迭代将在找到的第一个与条件匹配的项目处停止。
所以性能差异不是 Where()
遍历所有项(在 linq-to-objects 中),因为它确实不需要(当然,除非找不到满足它的),这是 Where()
子句必须设置一个迭代器来遍历元素,而 Any()
没有谓词。