LINQ是否通过消除循环来提高性能?

时间:2010-11-24 14:19:29

标签: c# linq linq-to-objects

我已经将Linq用于某些集合对象(Dictionary,List)。因此,如果我想根据条件选择项目,我会编写Linq查询,然后枚举linq对象。所以我的问题是,Linq是否取消了对主要集合的循环,从而提高了性能?

4 个答案:

答案 0 :(得分:8)

绝对不是。 LINQ to Objects在内部循环 - 它还有什么用呢?

另一方面,LINQ 比你可以采取的某些方法更有效率,只有在需要时才传输数据等。

第三方面,它涉及额外的间接层(所有迭代器等),这将对性能产生一些边际影响。

答案 1 :(得分:2)

Probbaly没有。 LINQ适合简洁(希望)可读的代码。

除非支持数据结构支持比扫描更有效的搜索算法,否则它会循环播放。

答案 2 :(得分:1)

不,实际上如果您使用的是LINQ to SQL,性能会稍微差一些,因为LINQ毕竟是ado.net堆栈之上的附加层。

如果你在对象上使用linq。 linq进行了优化,最重要的是“Yield”,它会在生成时从IEnumerable开始产生结果。这比标准方法更好,它必须等待List被函数填充和返回才能迭代它。

答案 3 :(得分:1)

当您直接使用查询时,您仍然遍历整个集合。 您只是看不到所有内容,因为查询只会返回与您的过滤器匹配的元素。 整体性能甚至可能会受到影响,仅仅是因为所涉及的所有嵌套迭代器。 当你在查询结果上调用ToList(),然后多次使用这个结果时,那么你在性能方面会更好。