Linq更快,更慢还是一样?

时间:2010-05-21 17:26:13

标签: c# linq performance

这是:

Box boxToFind = AllBoxes.FirstOrDefault(box => box.BoxNumber == boxToMatchTo.BagNumber);

比这更快或更慢:

Box boxToFind ;
foreach (Box box in AllBoxes)
{
    if (box.BoxNumber == boxToMatchTo.BoxNumber)
    {
        boxToFind = box;
    }
}

两者都给了我正在寻找的结果(boxToFind)。这将在我需要表现良好的移动设备上运行。

8 个答案:

答案 0 :(得分:8)

它应该大致相同,但您需要拨打First(或匹配代码Last),而不是Where。 致电Where将为您提供一组匹配项(IEnumerable<Box>);你只想要一个匹配的项目。

通常,在使用LINQ时,您需要了解延迟执行。在你的特定情况下,它是无关紧要的,因为你得到一个单项。

答案 1 :(得分:8)

除非您通过性能分析确定此特定循环是性能瓶颈,否则差异并不重要。

如果分析确实发现它有问题,那么您将需要查看备用存储。将数据存储在字典中,该字典提供比循环数组更快的查找。

答案 2 :(得分:2)

如果微观优化是你的事情,那么LINQ表现更差,this is just one article,你可以找到很多其他帖子。

答案 3 :(得分:1)

微优化会杀了你。
首先,完成全班,然后,如果遇到性能问题,运行一个分析器并检查应用程序的热点。
确保你使用最好的算法,然后转向这样的微优化。

如果你已经做过:
慢 - &gt;快速
LINQ&lt; foreach&lt; for&lt;不安全(不建议使用最后一个选项) 抽象将使您的代码在95%的时间内变慢。

答案 4 :(得分:0)

最快的是当你使用for循环时。但差别很小,你忽略它。只有你构建一个实时应用程序才有意义但是对于那些应用程序来说,C#不是最好的选择!

答案 5 :(得分:0)

如果AllBoxes是IQueryable,它可能比循环更快,因为可查询可以具有Where-operation的优化实现(例如索引访问)。

答案 6 :(得分:0)

LINQ绝对慢100%

取决于你想要在你的程序中完成什么,但在大多数情况下,这肯定是我称之为LAZY PROGRAMMER CODE ......

你将基本上&#34;拖延&#34;如果你正在执行任何复杂的查询,加入等...那些类型的函数/方法的总p.o.s-只是不使用它。如果你这么做的话,从长远来看你将会更加快乐......而且表现将是一个世界。

注意

对于为速度/同步任务/计算而构建的任何程序,我绝对不推荐使用LINQ (即HFT交易&amp; /或AT交易i-0-i为初学者)。

<强> TESTED

花了近10秒钟完成了&#34; LINQ&#34;与&lt; 1毫秒。

答案 7 :(得分:-2)

LINQ vs Loop - 性能测试

LINQ: 00:00:04.1052060, avg. 00:00:00.0041052
Loop: 00:00:00.0790965, avg. 00:00:00.0000790

参考文献:

http://ox.no/posts/linq-vs-loop-a-performance-test

http://www.schnieds.com/2009/03/linq-vs-foreach-vs-for-loop-performance.html