[英]Performance Comparison of Two Linq Calls
假设在内存列表上运行了两个查询;
第一个查询(使用扩展方法):
var temp = listX.Where(q => q.SomeProperty == someValue);
第二个查询:
var temp = from o in listX
where o.SomeProperty == someValue
select o;
两个查询在性能方面是否存在差异; 如果有,为什么?
不,没有任何区别。 编译器在内部将第二个版本转换为第一个版本。
C#规范(第7.6.12节)规定:
C#语言未指定查询表达式的执行语义。 相反,查询表达式被转换为符合查询表达式模式(第7.16.3节)的方法的调用。 具体来说,查询表达式被翻译成命名的方法调用
Where
,Select
,SelectMany
,Join
,GroupJoin
,OrderBy
,OrderByDescending
,ThenBy
,ThenByDescending
,GroupBy
和Cast
。这些方法预计将有特定的签名和结果类型,如§描述7.16.3。 这些方法可以是被查询对象的实例方法,也可以是对象外部的扩展方法,它们实现查询的实际执行。从查询表达式到方法调用的转换是在执行任何类型绑定或重载解析之前发生的语法映射。 保证翻译在语法上是正确的,但不能保证生成语义正确的C#代码。 在转换查询表达式之后,生成的方法调用将作为常规方法调用进行处理,这可能反过来发现错误,例如,如果方法不存在,参数类型错误,或者方法是通用的,类型推断失败。
没有差异。 它会在同一时间产生相同的结果。 它基本上是具有不同语法的相同代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.