c# – 编译LINQ to SQL的查询何时可以提高性能
我指的是
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秒钟. 预编译查询是否真的提高了性能?或者我的错误使用条款? 感谢您的时间和考虑. 编辑: 解决方法
请记住,LINQ查询有两个主要部分可能特别昂贵:
>将LINQ表达式编译成SQL语句. 在您的情况下,您有一个相对简单的查询,非常慢的数据库连接,一些非常大的数据集,或者没有以最佳方式索引的表来运行此特定查询.或者也可以是三者的组合. 因此,与为查询生成SQL所花费的时间相比(可能是10-50毫秒),第二步是花费很多时间(?1000毫秒),您几乎不会注意到差异. 如果满足以下条件,您将看到显着的改进: >你的LINQ查询很复杂, 实际上,我有一个查询可能需要500多个编译,但只有几毫秒才能实际运行.这些通常是我专注于预编译查询的情况. 提前知道预编译查询可以获得什么样的性能提升的一个好方法是使用Stopwatch对象对查询的第二个实例进行计时,然后使用LINQPad的Analyze SQL功能直接运行生成的SQL.如果SQL查询快速返回,但LINQ查询需要很长时间,那么这是预编译的好选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |