gpt4 book ai didi

c# - LINQ to SQL 的编译查询什么时候提高性能

转载 作者:可可西里 更新时间:2023-11-01 08:25:34 24 4
gpt4 key购买 nike

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

我想看到编译查询的性能改进,因此我尝试了作者提供的相同示例。我使用 Northwind Db 作为数据上下文。我尝试了正常执行和编译查询执行,并在 LINQ PAD 上检查了它们。

首先,我尝试使用 CompileQuery 执行查询。耗时 2.065 秒。

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 秒。

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 秒。

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

感谢您的时间和考虑。

编辑:阅读已接受的答案后,读者可能还想通过 this article这很好地解释了编译查询如何提高性能。

最佳答案

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

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

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

因此,与为您的查询生成 SQL 所花费的时间(可能 10-50 毫秒)相比,第二步所花费的时间如此之多(~1000 毫秒),您几乎察觉不到差异。

如果满足以下条件,您将看到显着的改进:

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

在实践中,我遇到过编译时间可能超过 500 毫秒,但实际运行仅需几毫秒的查询。这些通常是我专注于预编译查询的情况。

提前了解预编译查询可以带来什么样的性能提升的一个好方法是使用 Stopwatch 对象为查询的second 实例计时,然后使用 LINQPad 的分析 SQL 功能直接运行生成的 SQL。如果 SQL 查询返回很快但 LINQ 查询需要很长时间,那么预编译是一个很好的选择。

关于c# - LINQ to SQL 的编译查询什么时候提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com