Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lambda是否比linq查询更快?_Linq_C# 4.0_Lambda_Parallel Processing_Parallel Extensions - Fatal编程技术网

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 此时,这两个表单将编译为完全相同的代码 此外,您的测试中还有一个巨大的漏洞:您正在

我在玩lambda、linq和parallel,有一个问题来了

lambda比linq查询快吗


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));