为什么LINQ在这个例子中更快我写了下面的代码来测试使用foreachvsLINQ的性能:放;}}staticvoidMain(string[]args){列表部件=newList();发现整数=0;对于(inti=0;ia.Name.StartsWith("4")).Count();控制台.WriteLine(found+"-"+DateTime.Now.Subtract(starttime).Milliseconds+"ms");控制台.ReadLine();我得到的输出如下:31160-116ms31160-95msineachrun,LINQ比foreach高大约20%。据我所知,LINQ扩展方法使用标准的c#。那么为什么在这种情况下LINQ会更快呢?编辑:所以我更改了我的代码以使用秒表而不是日期时间,但仍然得到相同的结果。如果我先运行LINQ查询,那么我的结果显示LINQ比foreach慢大约20%。这一定是某种JIT预热问题。我的问题是如何在我的测试用例中补偿JIT预热?这是因为你没有热身。如果你颠倒情况,你会得到相反的结果:31272-110ms31272-80ms开始添加预热并使用秒表以获得更好的计时。使用预热运行测试://WARMUP:widgets.Where(a=>a.Name.StartsWith("4")).Count();foreach(Widgetwinwidgets){if(w.Name.StartsWith("4"))found+=1;}//RUN测试秒表stopwatch1=newStopwatch();秒表1.开始();found=widgets.Where(a=>a.Name.StartsWith("4")).Count();秒表1.Stop();Console.WriteLine(found+"-"+stopwatch1.Elapsed);发现=0;秒表stopwatch2=newStopwatch();秒表2.开始();foreach(Widgetwinwidgets){if(w.Name.StartsWith("4"))found+=1;秒表2.Stop();Console.WriteLine(found+"-"+stopwatch2.Elapsed);结果:31039-00:00:00.078350831039-00:00:00.0766299我做了一段时间的分析,比较以下内容:我发现LINQ、Lambda和传统迭代始终相同,但真正的时间差异在于正则表达式。仅添加正则表达式会使评估变慢(慢很多)。(有关详细信息,请参见:http://www.midniteblog.com/?p=72)您在上面看到的可能是因为您在同一个代码块中有两个测试。尝试评论一个,计时,然后评论另一个。另外,请确保您运行的是发布版本,而不是在调试器中。以上是C#学习教程:本例分享LINQ为什么更快?涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
