LINQ与正常迭代

时间:2014-06-05 00:36:53

标签: performance linq

我是LINQ新手,我想知道使用LINQ而不是普通循环迭代的好处/缺点是什么?我知道LINQ更容易阅读,但是存在效率问题,因此它们在哪里?是特定的结构/数据/查询还是一般情况下它们更糟糕?

1 个答案:

答案 0 :(得分:1)

LINQ有一些(相对较小的)性能问题,因为

  • 传递Lambdas比传递方法指针要慢一些,因为在lambda中捕获的vairables存储在编译器生成的特殊类中。如果您使用ILDasm
  • 打开输出,则可以看到此信息
  • 方法指针比直接传递方法稍慢,因为运行时必须检查类型的安全性
  • 因此,严格来说,使用大量break和continue语句直接迭代序列肯定是最快的方法,但不是最好的方法。

使用Linq(System.Linq.Enumerable类中的语法或扩展方法)的优势

  • 是读取和写入更容易,特别是当您获得诸如连接,拉链,聚合等复杂查询时,使这些方法返回值而不必自己编写辅助函数尤其方便。
  • 这可能非常重要,因为这意味着您可以更快地向程序添加内容,而不是通过使用foreach循环调整几个ms。
  • 实际上,在大多数情况下,差异是如此微小,在决定一种方式“更好”之前,你需要设置两种方式并并行运行速度测试。

此外,迭代

相对不合理
  • 能够使用Queryables将您的方法调用构建到其他内容中,例如Linq to SQL或其他数据库包装器,您可以将其调用为更多LINQ
  • 能够快速并行化.AsParallel()