`
netbabe
  • 浏览: 24331 次
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何提高Linq查询的性能(上)

阅读更多

自从Linq提出了之后,让很多的开发人员一阵的狂喜,编写代码似乎比以前更别的方便了,特别是随着Linq2Sql等推出来之后,开发人员感到了似乎手中有了强大的武器。同时,Linq2Sql带来的问题不断的出现,特别实在性能上面,这是让很多的多性能有着高要求的应用要放弃Linq2Sql系列技术的原因,并且很多回到了以前的ADO.NET技术,追求完全的控制。

 

       这里和大家分享一些知识。我们本篇文章不对谈了Linq系列技术是否好,是否改用,而是告诉那些将会或者已经使用了Linq技术的朋友,如何来提升Linq2Sql查询的性能。

              

在本篇文章中,我们首先会介绍Linq2Sql查询是如何被执行的,然后我们介绍如何来编译Linq查询从而使得其性能提升。

本篇希望大家对Linq2Sql查询,特别是Linq2Sql的使用有一定的经验。

 

深入的查看Linq2Sql查询的工作原理

 

       首先我们来看看下面的一个简单的Linq查询,这个查询非常的简单,就是从一个Customer表中获取数据,这个Linq的查询被Linq的引擎转换为SQL语句,如下:

 

20120410110155.png

 

              

 

       对于一个Linq查询,首先,需要检查它的语法,词法,最后产生SQL语句。这个过程可以说是非常耗时的,并且对于每个Linq查询都要这样做。如果我们可以将每一个Linq查询的查询计划缓存的话,那么就快了。

 

       其实这个原理和我们使用SQL Server一样:把SQL Server提交到数据库,首先执行词法语法分析,然后生成查询树,然后再交给查询优化器,生成执行计划,然后交给执行引擎去执行,最后又存储引擎获取数据,并且生成的执行计划被缓存,以便重用,这样就极大的提升了性能,更多请看这里

              

       在Linq技术中,提供了一种名为编译Linq查询的技术。在编译的Linq查询中,Linq生成的执行计划被缓存在一个静态的类中。我们知道,静态类是一个全局的公共资源,所以Linq查询可以去这个静态类中找到相应的执行计划,而不是每次都去解析,如下:

 

20120410110237.png

 

       从上图中可以看到:从Linq的查询到最后的执行解析成为SQL去执行,需要经历四个步骤,如果没有缓存Linq查询的执行计划,那么其实就是有5个步骤的,如下:

 

20120410110310.png

 

 

如何编写编译的Linq查询

 

既然已经知道了编译查询可以提升性能,那么我们就来看看具体的如何操作。

首先就要导入System.Data.Linq命名空间。

然后,为了避免一上来就丢上一大堆代码使得朋友们不舒服,我们就一点点的来进行:

  1.  
    1. 首先定义一个静态的类:clsCompiledQuery
    2. 然后添加一个公共的静态方法指针变量,签名如下: 

20120410110414.png

 

那么对于这个方法:

a. 这个方法的参数要首先接受一个DataContext对象

b. 这个方法可以随后接受一个或者多个输入参数,现在在我们的例子中,我们就接受了一个string类型的输入参数,因为我们的上面的customer的查询只是传入了一个txtCustomer.Text的值。

c. 我们需要定义类型为IQueryable的输出参数。

 

 

3. 定义好了方法指针的变量之后,我们就可以调用CompiledQuery类的方法Compiled,并且将DataContext与一个string作为输入参数,如下:

 

20120410110555.png

 

 

4. 整个方法指针的定义完整代码如下: 

20120410110637.png

5.整个静态类的定义如下: 

20120410110714.png

 

上面的准备工作做好了之后,我们就开始使用。可以在需要的地方进行如下的调用:

 

20120410110751.png

分享到:
评论

相关推荐

    学习LINQ:LINQ查询基础

    这有助于提高性能,因为查询不会立即执行,而是等到数据需要时才进行。 ### LINQ查询基础 #### 查询表达式示例 ```csharp var query = from customer in customers where customer.City == "London" select ...

    如何将LINQ查询性能提高5倍?

    本篇文章将探讨如何通过一系列策略和技巧将LINQ查询性能提高5倍,主要针对C#开发者,适用于.NET 4及更高版本,并与VS 2003、VS 2005、VS 2008、ASP.NET和SQL Server 2005等开发环境兼容。 首先,理解LINQ的工作原理...

    使用LINQ查询(ASP.NET开发大全

    这一过程不仅提高了代码的可读性,而且由于LINQ与C#的紧密结合,它还能够利用C#强大的语言特性,比如类型安全性、编译时检查等,从而提高开发效率和应用程序的性能。 ***是一个用于开发Web应用程序的***框架。***...

    linq 简单查询,分页

    通过LINQ,开发者可以使用类似于SQL的语法来筛选、排序和操作集合,从而大大简化了代码量和提高了代码的可读性。 ### LINQ简单查询 LINQ提供了两种查询方式:查询表达式(Query Expression)和方法语法(Method ...

    SqlServerQueryVisualizer LINQ查询工具

    这款工具通过可视化的方式展示了LINQ查询如何转换为实际的SQL语句,使得开发者能更直观地看到两者之间的映射关系,从而提高代码的调试和性能调优效率。 首先,我们要理解LINQ的基本概念。LINQ是.NET框架的一个重要...

    语言集成查询 (LINQ)

    LINQ的出现极大地提高了开发人员处理数据的效率,无论是数据库、XML文档还是内存中的集合,都可以使用统一的查询语法进行操作。 ### LINQ 的核心概念 1. **查询表达式语法**:LINQ 提供了一种直观的、类似SQL的...

    新技术讲座LINQ复杂查询 (学习资料带例子)

    这意味着查询并不会立即执行,而是在需要结果时才会执行,这可以提高性能并允许对查询进行更灵活的组合。 对于数据库查询,LINQ to SQL和Entity Framework等技术允许我们使用相同的查询语法与SQL数据库交互。例如,...

    一个使用Linq查询数据库的Demo

    7. **异步查询**:如果涉及到大量数据处理,可能还会展示如何使用async/await关键字实现异步查询,以提高应用程序的性能和响应性。 8. **查询优化**:了解Linq如何生成SQL语句,以及如何根据生成的SQL优化查询性能...

    LINQ 中模糊查询 免费下载

    - `var v = from emp in dc.employee`:定义了一个LINQ查询,其中`dc`是数据上下文对象,`employee`是从数据库加载的员工集合。 - `where emp.emp_Code.StartsWith(searchCode)`:检查`emp_Code`字段是否以`...

    Go-在Go中实现类似.NET的LINQ查询方法

    5. **并发支持**:Go的并发模型由goroutines和channels提供,go-linq可能支持在查询过程中并行处理数据,提高性能。 6. **错误处理**:Go强调错误处理,go-linq库中的每个查询操作可能都会返回一个错误值,以便于...

    通过linq技术对数据实现查询修改等操作

    - **延迟执行**:LINQ查询不会立即执行,而是在需要结果时才执行,这称为延迟执行,提高了性能。 - **转换效率**:LINQ查询表达式可以被优化,生成高效的SQL语句。 ### 4. LINQ示例 ```csharp using (var db = new...

    使用LINQ访问数据库

    在《使用LINQ访问数据库》这本书中,你将学习到如何创建数据库上下文,定义实体模型,以及如何使用LINQ查询这些模型。书中会详细讲解如何进行插入、更新和删除操作,以及如何处理复杂的关联和分组查询。此外,还会...

    linq基础 linq to sql

    2. 性能优化:虽然LINQ to SQL简化了数据库操作,但在处理大量数据时,应考虑查询效率,避免无效的N+1查询和过度复杂的查询。 五、总结 LINQ to SQL是LINQ技术在SQL数据库操作上的具体实现,它将数据库操作对象化,...

    在工作流中使用linq查询

    LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项功能,它允许开发人员使用相同的语法进行数据库、集合、XML以及其他数据源的查询,提高了代码的可读性和维护性。...

    dotnet-LinqOptimizer一个自动查询优化器顺序和并行LINQ的编译器

    3. **并行查询(Parallel LINQ, PLINQ)**: PLINQ是LINQ的一个扩展,允许在多核处理器上并行执行查询,通过数据并行性提高程序运行速度。 4. **编译器设计与实现**: LinqOptimizer作为一个编译器,涉及到了词法分析...

    linq入门与提高学习心得

    LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本中引入的一项重要技术,它允许开发者使用类似SQL的语法在各种数据源上执行查询操作,如数据库、XML、集合等。LINQ的出现大大简化了...

    通过Linq操作Sql Server数据库

    Linq极大地简化了数据访问,提高了代码的可读性和可维护性,尤其适合初学者学习。 **1. Linq的基本概念** Linq的核心在于将SQL查询语句与C#或VB.NET语法融合,使得在代码中可以直接编写查询表达式。Linq提供了一种...

    LInq入门宝典 Linq To Xml linq to sql

    3. **延迟执行**:LInq To Xml的查询操作是延迟执行的,这意味着直到实际访问查询结果时才会执行查询,提高了性能。 4. **内存效率**:LInq To Xml采用轻量级的树形结构,占用的内存比DOM少,适合处理大型XML文档。 ...

    LINQ实战+LINQ高级编程 2本电子书 中文

    1. **延迟执行(Deferred Execution)**:LINQ查询不会立即执行,而是等到数据真正需要时才执行,这样可以提高性能。 2. **查询优化**:理解如何通过优化查询表达式和选择合适的操作符来提高查询效率。 3. **并行...

Global site tag (gtag.js) - Google Analytics