两个Linq调用的性能比较

本文关键字:性能比 比较 性能 Linq 调用 两个 | 更新日期: 2023-09-27 17:58:45

假设有两个查询在内存列表上运行;

第一个查询(采用扩展方法):

var temp = listX.Where(q => q.SomeProperty == someValue);

第二个查询:

var temp = from o in listX
              where o.SomeProperty == someValue
              select o;

两个查询在性能方面是否存在差异;如果有的话,为什么?

两个Linq调用的性能比较

不,根本没有区别。编译器在内部将第二个版本转换为第一个版本。

C#规范(§7.6.12)规定:

C#语言没有指定查询的执行语义表达式。相反,查询表达式被转换为调用符合查询表达式模式的方法(§7.16.3)。具体来说,查询表达式被转换为方法命名为WhereSelectSelectManyJoinGroupJoinOrderByOrderByDescendingThenByThenByDescendingGroupByCast期望方法具有特定的签名和结果类型,如§7.16.3所述。这些方法可以是正在查询的对象或外部的扩展方法对象,并且它们实现查询的实际执行。

从查询表达式到方法调用的转换是在任何类型绑定或重载之前发生的语法映射已经执行了解析。翻译保证语法正确,但不能保证产生语义正确的C#代码。查询翻译后表达式,生成的方法调用将按常规处理方法调用,这反过来可能会发现错误,例如如果方法不存在,如果参数的类型错误,或者方法是泛型的,类型推理失败。

没有差异。它将在同一时间内产生相同的结果。它基本上是相同的代码,具有不同的语法。

简短问题,简短答案:

没有区别。两者都是相同的,只是用不同的语法编写。

另请参阅MSDN文档中的查询语法和方法语法。