两个Linq呼叫的性能比较

时间:2013-02-12 14:40:48

标签: c# .net performance linq

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

首先查询(使用扩展方法):

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

第二次查询:

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

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

3 个答案:

答案 0 :(得分:8)

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

C#规范(第7.6.12节)规定:

  

C#语言没有指定查询的执行语义   表达式。相反,查询表达式被转换为调用   遵循查询表达式模式的方法(第7.16.3节)。   具体来说,查询表达式被转换为调用   名为WhereSelectSelectManyJoinGroupJoinOrderBy的方法,   OrderByDescendingThenByThenByDescendingGroupByCast。这些   方法应该具有特定的签名和结果类型,   如第7.16.3节所述。这些方法可以是实例方法   正在查询的对象或外部的扩展方法   对象,它们实现了查询的实际执行。

     

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

简短的问题,简短的回答:

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

另请参阅Query Syntax and Method Syntax的MSDN文档。