C# 查询表达式与Lambda表达式

C# 查询表达式与Lambda表达式,c#,performance,linq,lambda,query-expressions,C#,Performance,Linq,Lambda,Query Expressions,使用查询表达式而不是lambda表达式有什么意义?它不仅速度慢,而且更加冗长: 示例(来自上面的链接): 结果(来自上面的链接): 仅仅为了可读性,让代码慢34倍真的值得吗?它们最终都是一样的 您的文章的测试速度惊人的原因是延迟执行。这些代码实际上并没有在他们正在计时的区域做任何事情。只有在调用.ToList()时,它才会执行某些操作。。或另一种强制计算查询的方法(lambda或其他)。解释查询很快(非常快,看看您提供的时间),但在计算查询时实际循环数据是另一回事 编辑: 我刚读了这篇文章。您会

使用查询表达式而不是lambda表达式有什么意义?它不仅速度慢,而且更加冗长:

示例(来自上面的链接):

结果(来自上面的链接):


仅仅为了可读性,让代码慢34倍真的值得吗?

它们最终都是一样的

您的文章的测试速度惊人的原因是延迟执行。这些代码实际上并没有在他们正在计时的区域做任何事情。只有在调用
.ToList()
时,它才会执行某些操作。。或另一种强制计算查询的方法(lambda或其他)。解释查询很快(非常快,看看您提供的时间),但在计算查询时实际循环数据是另一回事

编辑:

我刚读了这篇文章。您会注意到,根据作者的说法,
for
循环是所有3个循环(查询表达式、方法语法,
for
循环)中最慢的。这是非常错误的

基本的
for
循环怎么可能比lambda慢数千倍?这根本没有道理。循环是迭代数据的最基本方式。lambda做了什么,比循环更高级


…他们没有。他们还没有执行死刑。注意:延迟执行。

编译器将查询表达式转换为使用lambdas的查询。这意味着这两个示例将编译成完全相同的代码,因此不会有性能差异


这意味着您链接到的基准是非常错误的(考虑到其他错误,这并不奇怪),您应该根据可读性在这两种形式之间做出决定。

我认为这可能已经在,如果我能告诉人们关于LINQ的唯一一件事,那就是:查询表达式的结果就是查询。这不是执行查询的结果。你发现写问题要比回答问题快得多,这并不奇怪。谢谢你,你的回答帮助了很多汉克斯对这一观点的理解。这里值得指出的是,在高需求的应用程序中,即使是“非常快速”的查询也会变得非常重要(以500000个并发用户为例),因此这种级别的微优化是一个很好的习惯,可以在其中执行。可能,由于缓存的原因,无论哪个级别的微优化都需要更长的时间来构建查询。如果交换基准测试,它们可能会更快地显示lambda版本。
QE: var products = from p in northwind.Products where p.Category.CategoryName == "Beverages" select p;
LE: var products = northwind.Products.Where(p => p.Category.CategoryName == "Beverages");
QE: 00:00:00.0019557, avg. 00:00:00.0004552
LE: 00:00:00.0000574, avg. 00:00:00.0000133