You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Linq中Any与All等价写法性能对比及认知校验

LINQ中All与Any对应写法的性能问题解答

核心结论

你的判断不正确,这两种写法的运行逻辑完全等价,实际执行性能几乎没有差异,不存在Any稳定比All更快的情况。

具体原因说明

1. 你对All方法的运行逻辑存在误解

LINQ的All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)方法底层并不会无脑遍历整个集合:

  • 遍历过程中只要遇到第一个不满足predicate条件的元素,就会立刻终止遍历,直接返回false
  • 只有当所有元素都满足predicate条件时,才会遍历完整个集合返回true

2. 两种写法逻辑完全等价

你给出的两段代码判断的是完全相同的结果:

  • 写法1 recordsList.All(r => r.Deleted):判断集合中所有元素的Deleted属性都是true
  • 写法2 !recordsList.Any(r => !r.Deleted):判断集合中不存在任何一个Deleted属性为false的元素
    二者的判断逻辑互为逆否命题,最终输出的布尔值完全一致。

3. 遍历次数完全相同

不管集合数据是什么样的,两种写法的遍历次数没有任何区别:

  • 只要集合中存在Deleted = false的元素,二者都会在找到第一个符合该条件的元素时立刻终止遍历,遍历次数一致
  • 如果集合中所有元素的Deleted都是true,二者都会遍历完整个10万条记录的集合才返回结果,遍历次数一致
    二者仅有的差异是谓词里多了一次逻辑取反操作,这个开销是纳秒级的,在10万条数据的场景下完全感知不到,属于正常运行误差范围。

额外补充

如果这两个写法是作用于IQueryable类型的远程数据源(比如Entity Framework查询数据库),二者生成的SQL语句完全一致,数据库端的执行性能也没有任何差别。

内容的提问来源于stack exchange,提问作者Secretary Of Education

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:18:03