lambda是否比linq查询更快?
我在玩lambda、linq和parallel,有一个问题来了 lambda比linq查询快吗lambda是否比linq查询更快?,linq,c#-4.0,lambda,parallel-processing,parallel-extensions,Linq,C# 4.0,Lambda,Parallel Processing,Parallel Extensions,我在玩lambda、linq和parallel,有一个问题来了 lambda比linq查询快吗 O编写一些测试代码(),lambda方法似乎更快。这是真的还是我遗漏了什么?您的查询不一样 查询表达式: from p in lista where p.Age > 18 && p.Age < 60 && p.Phone.StartsWith("11") select p 此时,这两个表单将编译为完全相同的代码 此外,您的测试中还有一个巨大的漏洞:您正在
O编写一些测试代码(),lambda方法似乎更快。这是真的还是我遗漏了什么?您的查询不一样 查询表达式:
from p in lista
where p.Age > 18 && p.Age < 60 && p.Phone.StartsWith("11")
select p
此时,这两个表单将编译为完全相同的代码
此外,您的测试中还有一个巨大的漏洞:您正在测试构建查询。。。你从来没有实际评估过它:
sw.Start();
IEnumerable LISTASEMPALELISMOLINQ=来自lista中的p
其中p.年龄>18岁和p.年龄<60岁
p、 电话。开始使用(“11”)
选择p;
sw.Stop();
您必须以某种形式使用查询,例如对其调用
Count()
,以便使其实际“执行”。(您需要将类型更改为泛型IEnumerable
形式,例如使用var
)在几乎所有情况下,简单构造查询所花费的时间基本上都是无关的。我做了@Jon Skeet建议的修改,按以下顺序运行程序
Console.WriteLine("1 - LINQ without paralelism " + LinqWithoutParalelism(lista));
Console.WriteLine("2 - LINQ with paralelism " + LinqWithParalelism(lista));
Console.WriteLine("3 - Lambda without paralelism: " + LambdaWithoutParalelism(lista));
Console.WriteLine("4 - Lambda with paralelism: " + LambdaWithParalelism(lista));
lamba速度更快,但我将执行顺序改为
Console.WriteLine("3 - Lambda without paralelism: " + LambdaWithoutParalelism(lista));
Console.WriteLine("4 - Lambda with paralelism: " + LambdaWithParalelism(lista));
Console.WriteLine("1 - LINQ without paralelism " + LinqWithoutParalelism(lista));
Console.WriteLine("2 - LINQ with paralelism " + LinqWithParalelism(lista));
而lambda不是速度更快的。
我知道这个测试非常简单,我没有考虑预热时间和进行大量交互,但实际上我的答案是:不,lambda并不比linq查询快。对,我错过了这一点。更改代码以再次测试。不,正如我之前所说:这两个表单将编译为完全相同的代码。查询表达式由编译器有效地转换为“没有查询表达式的C”。不要在同一执行行中运行多个测试,可能会发生很多事情。。。GC可能会成为阻碍,等等。。。一次只运行一个测试,并运行几次以获得您可以信任的值。
sw.Start();
IEnumerable listaSemParalelismoLinq = from p in lista
where p.Age > 18 && p.Age < 60 &&
p.Phone.StartsWith("11")
select p;
sw.Stop();
Console.WriteLine("1 - LINQ without paralelism " + LinqWithoutParalelism(lista));
Console.WriteLine("2 - LINQ with paralelism " + LinqWithParalelism(lista));
Console.WriteLine("3 - Lambda without paralelism: " + LambdaWithoutParalelism(lista));
Console.WriteLine("4 - Lambda with paralelism: " + LambdaWithParalelism(lista));
Console.WriteLine("3 - Lambda without paralelism: " + LambdaWithoutParalelism(lista));
Console.WriteLine("4 - Lambda with paralelism: " + LambdaWithParalelism(lista));
Console.WriteLine("1 - LINQ without paralelism " + LinqWithoutParalelism(lista));
Console.WriteLine("2 - LINQ with paralelism " + LinqWithParalelism(lista));