lambda比linq查询更快吗?

Ewe*_*ton 3 linq parallel-processing lambda parallel-extensions c#-4.0

我玩lambda,linq和parallel并且有一个问题到了.

lambda比linq查询更快吗?

O写一些测试代码(在GitHub中使用Fork),lambda方法似乎更快.这是真的还是我错过了什么?

Jon*_*eet 8

您的查询不一样.

查询表达式:

from p in lista 
where p.Age > 18 && p.Age < 60 && p.Phone.StartsWith("11")
select p
Run Code Online (Sandbox Code Playgroud)

常规扩展方法调用:

.Where(n => n.Age > 18).
 Where(n => n.Age < 60).
 Where(n => n.Phone.StartsWith("11"))
Run Code Online (Sandbox Code Playgroud)

第一个叫Where 一次 ; 第二次打Where三次电话.要使它们的行为完全相同,您应该使用:

.Where(n => n.Age > 18 && n.Age < 60 && n.Phone.StartsWith("11"))
Run Code Online (Sandbox Code Playgroud)

此时,两个表单将编译为完全相同的代码.

此外,您的测试中存在巨大漏洞:您正在测试构建查询...您实际上从未对其进行评估:

sw.Start();
IEnumerable listaSemParalelismoLinq = from p in lista
                                      where p.Age > 18 && p.Age < 60 && 
                                            p.Phone.StartsWith("11")
                                      select p;
sw.Stop();
Run Code Online (Sandbox Code Playgroud)

必须以某种形式使用查询,例如调用Count()它,以使其实际上"执行".(您需要将类型更改为通用IEnumerable形式,例如使用var.)在几乎所有情况下,简单构造查询所花费的时间基本上无关紧要.