.NET中LINQ和Lambda表达式的效率和性能如何?

我已经使用.Net 3.5和VS 2008超过一个月。 像大多数.Net开发人员一样,我已经从.Net 1.0&2.0和VS 2005的多年经验发展而来。就在最近,我发现了LINQ和Lambda表达式的简单性和强大功能,就像我最近的问题,例如在列表中查找项目LINQ,使用Lambda或LINQ将类实例转换或映射到另一个类的实例列表,以及使用Lambda或LINQ将类的列表转换或映射到另一个类的列表。

我承认Lambda和LINQ更简单易读,而且看起来非常强大。 在幕后,.Net编译器必须生成大量代码才能实现这些功能。 因此,我有点犹豫是否改用新的语法,因为我已经知道实现相同结果的“旧”方法。

我的问题是关于Lambda和LINQ的效率和性能。 也许Lambda表达式大多是内联函数,在这种情况下,我猜Lambda应该没问题。 那么LINQ怎么样?

让我们将讨论限制在LINQ到对象的LINQ到SQL(LINQ到SQL)中。 任何意见,比较和经验?


没有任何一个答案在这里就足够了。

LINQ有很多用途和许多实现,因此对代码效率的影响很大。

就像我们触手可及的每一项技术一样,LINQ可以也会被滥用和滥用,区分这一点和正确使用的能力仅取决于一件事情:知识。

所以我可以给你的最好的建议是去阅读LINQ是如何实现的。

你应该检查的东西是:

  • LINQ以及它如何在现有集合类型上使用方法和扩展方法
  • LINQ如何工作
  • LINQ如何在内部工作(堆栈溢出)
  • 如何使用LINQ编码工作? 幕后发生了什么?
  • LINQ到对象和LINQ到SQL的不同之处
  • LINQ查询表达式和扩展方法有什么区别(Stack Overflow)
  • 例如,新的LINQ语法的替代方法,用于集合的.Where(...)扩展方法的使用
  • 与往常一样,当考虑效率问题时,唯一可靠的方法就是测量。 使用LINQ创建一段代码,它执行单一的知道事情并创建一个备选方案,然后衡量两者,并尝试改进。 猜测和假设只会导致不好的结果。


    从技术上讲,最快的方法是自己控制所有的细节。 以下是一些性能测试。 请注意,foreach关键字和ForEach LINQ结构的完全相同程度远远低于仅使用和编写过程代码的速度。

    但是,编译器可以并且将会得到改进,您可以随时查看代码并优化任何有问题的区域。 通常建议使用更具表现力的功能,使代码更易于阅读,除非您真的需要额外的纳秒。


    对于LINQ查询,使用'新语法'生成的IL(代码)基本上与直接调用由Enumerable和Queryable提供的扩展方法没有区别。

    链接地址: http://www.djcxy.com/p/51363.html

    上一篇: What is the Efficiency and Performance of LINQ and Lambda Expression in .Net?

    下一篇: LINQ query to return a Dictionary<string, string>