这是:
Box boxToFind = AllBoxes.FirstOrDefault(box => box.BoxNumber == boxToMatchTo.BagNumber);
比这更快或更慢:
Box boxToFind ;
foreach (Box box in AllBoxes)
{
if (box.BoxNumber == boxToMatchTo.BoxNumber)
{
boxToFind = box;
}
}
两者都给了我正在寻找的结果(boxToFind
)。这将在我需要表现良好的移动设备上运行。
答案 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