mar*_*rky 5 c# linq-to-objects
给定内存中的对象列表,我运行了以下两个表达式:
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?
干杯.
在Any()与谓词可以在没有迭代器执行其任务(yield return).使用a Where()创建一个迭代器,它会增加性能影响(虽然非常小).
因此,在性能方面(通过一点点),你最好使用Any()带谓词(x => x.Name == "bla")的形式.其中,个人而言,我发现更具可读性......
在旁注中,Where()不一定要枚举所有元素,它只是创建一个迭代器,它将在请求时遍历元素,因此调用Any()之后Where()将驱动迭代,这将停止在它找到的第一个项目符合条件.
因此,性能差异并不在于Where()在遍历所有的项目(LINQ到对象),因为它确实并不需要(当然,除非,它没有找到一个满足的话),这是该Where()子句设置迭代器来遍历元素,而Any()谓词则不然.
| 归档时间: |
|
| 查看次数: |
4199 次 |
| 最近记录: |