.where(...)之间的性能差异.Any()vs ..Any(...)

mar*_*rky 5 c# linq-to-objects

可能重复:
LINQ扩展方法 - Any()vs. Where()vs. Exists()

给定内存中的对象列表,我运行了以下两个表达式:

myList.where(x => x.Name == "bla").Any() 
Run Code Online (Sandbox Code Playgroud)

VS

myList.Any(x => x.Name == "bla")
Run Code Online (Sandbox Code Playgroud)

后者总是最快的,我相信这是由于Where枚举所有项目.但是当没有匹配时也会发生这种情况.

我不确定为什么.是否存在这种观察到的性能差异的情况,例如是否在查询Nhib?

干杯.

Jam*_*are 9

Any()与谓词可以在没有迭代器执行其任务(yield return).使用a Where()创建一个迭代器,它会增加性能影响(虽然非常小).

因此,在性能方面(通过一点点),你最好使用Any()带谓词(x => x.Name == "bla")的形式.其中,个人而言,我发现更具可读性......

在旁注中,Where()不一定要枚举所有元素,它只是创建一个迭代器,它将在请求时遍历元素,因此调用Any()之后Where()将驱动迭代,这将停止在它找到的第一个项目符合条件.

因此,性能差异并不在于Where()在遍历所有的项目(LINQ到对象),因为它确实并不需要(当然,除非,它没有找到一个满足的话),这是该Where()子句设置迭代器来遍历元素,而Any()谓词则不然.