首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时编译LINQ查询会提高性能

何时编译LINQ查询会提高性能
EN

Stack Overflow用户
提问于 2012-04-05 04:24:10
回答 1查看 5.4K关注 0票数 12

我指的是文章,它侧重于加速LINQ查询。它提到的技术之一是“使用编译后的查询”,并解释了如何使用它。

我希望看到编译查询的性能提高,因此我尝试了作者提供的相同示例。我用Northwind作为数据文本。我尝试了正常执行和编译查询执行,并在LINQ上检查了它们。

首先,我尝试使用在不使用的情况下执行查询CompileQuery。花了2.065秒。

代码语言:javascript
复制
var oo =   from o in Orders
   where o.OrderDetails.Any (p => p.UnitPrice > 100)
   select o;

oo.Dump ("Order items with unit price more than $100");

var oo1 = from o in Orders
   where o.OrderDetails.Any (p => p.UnitPrice > 10)
   select o;

oo1.Dump ("Order items with unit price more than $10"); 

其次,使用进行CompileQuery查询。花了2.100秒。

代码语言:javascript
复制
var oo = CompiledQuery.Compile ((TypedDataContext dc, decimal unitPrice) =>    
   from o in Orders
   where o.OrderDetails.Any (p => p.UnitPrice > unitPrice)
   select o
);

oo (this, 100).Dump ("Order items with unit price more than $100");
oo (this, 10).Dump ("Order items with unit price more than $10");

重新执行它们几次表明,这两种方法所花费的时间几乎是相似的。

在这里,我们只看到每个方法的两个查询执行。我试着对每个查询进行了10个查询。但他们都完成了大约7秒。

预编译查询真的能提高性能吗?还是我弄错了它的用法?

感谢您的时间和考虑。

编辑:在阅读了被接受的答案后,读者可能还想要阅读这篇文章,这很好地解释了编译后的查询如何提高性能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 04:32:08

请记住,LINQ查询的两个主要部分可能特别昂贵:

  1. 将LINQ表达式编译为SQL语句。
  2. 运行SQL语句并检索结果

在您的例子中,您有一个相对简单的查询,或者是一个非常慢的数据库连接、一些非常大的数据集,或者是没有以最佳方式进行索引的表来运行这个特定的查询。或者是三者的结合。

因此,与为查询生成SQL所需的时间(可能为10-50毫秒)相比,第二步所花费的时间太长(~1000 ms),以至于您很难注意到两者之间的差异。

如果以下条件都为真,您将看到显著的改进:

  1. 你的LINQ查询很复杂,
  2. 你能快速连接到你的数据库
  3. SQL查询本身在该数据库上运行得很快,并且
  4. 结果集足够小,可以相对较快地从数据库传输回来。

实际上,我的查询可能需要500 to以上才能编译,但实际运行的时间只有几毫秒。通常情况下,我将重点放在预编译查询上。

提前知道从预编译查询中可以获得何种性能的一个好方法是使用Stopwatch对象对查询的第二个实例进行计时,然后使用LINQPad的Analyze特性直接运行生成的SQL。如果SQL查询返回得很快,但是LINQ查询需要很长时间,那么这是预编译的一个很好的候选。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10022672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档