c# - .where(...).Any() 与 ..Any(...) 之间的性能差异

标签 c# linq-to-objects

<分区>

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() 没有谓词。

关于c# - .where(...).Any() 与 ..Any(...) 之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871796/

相关文章:

c# - 用 LINQ 替换嵌套的 foreach;修改和更新内部深处的属性

c# - LINQ 根据列表查询字典

c# - 在 linq 查询中过滤选定的枚举

c# - .NET 中另一个项目使用的项目中引用的 DLL

c# - 在磁贴更新上显示应用程序名称

组件加载时的 C# 加载屏幕

c# - 我可以在后面的代码中读取 css 类运行时的内容吗?

c# - 如何将这些 C# foreach 循环转换为 LINQ to Objects 并返回 bool 值?

c# - LINQ 查询以检测对象列表中的重复属性

c# - 如果设置为 true,AcceptsReturn 会禁用多行文本框中的 Key.Return 检测?