zoukankan      html  css  js  c++  java
  • AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试

    AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试.

    先上测试结果:

    AdoNetTest: 267ms
    AdoNetCachedCommandTest: 182ms
    LinqToSqlTest: 3191ms
    LinqToSqlCompiledQueryTest: 386ms
    NIntegrateQueryTest: 266ms

    下载

    下载测试数据库:AdventureWorksLT2008

    下载测试代码:NIntegrateQueryPerformanceComparison.zip

    代码导航

    AdoNetTest.cs
    AdoNetCachedCommandTest.cs
    LinqToSqlTest.cs
    LinqToSqlCompiledQueryTest.cs
    NIntegrateQueryTest.cs

    测试结果分析

    1. 在不使用CompiledQuery的情况下,LinqToSql的性能比AdoNet差一个数量级,用百分比的话就是慢超过1000%;
    2. 在缓存Command的情况下,AdoNet的查询性能可以提高约30%;
    3. 在使用CompiledQuery的情况下,LinqToSql的查询性能比缓存Command的AdoNet下慢50%;
    4. NIntegrqateQuery的查询性能和不带缓存的AdoNet查询性能相当,比LinqToSqlCompiledQuery快约40%;

    * 如对测试结果有任何异议,欢迎根跟贴友好讨论。

    什么是NIntegrateQuery?

    1. NIntegrateQuery是Teddy最新开发的开源组件NIntegrate的一部分。
    2. NIntegrate是一个企业级系统集成开发框架。它的核心设计思想是,提供一个基于数据库集中化管理WCF服务配置信息和应用程序配置信息的方案,从而使得基于WCF的企业级SOA系统集成真正成为可能。
    3. NIntegrateQuery是一个类似Linq的强类型数据库查询语言。它的设计目标并不是ORM,也当然不是重新发明一个类似LinqToSql的轮子。它的设计目标是一个安全(完全防范SQL注入攻击)、高性能(参见测试结果),所有查询对象可以跨WCF、跨COM传递,并且支持动态查询条件、分页、排序的数据库查询语言。因为这个设计目标,它目前不支持,作为NIntegrate的一个组件,将来也没有计划支持类似LinqToSql提供的join、group by这样的查询。如果您要做这样的查询,标准的做法是先建一个View,再对View进行查询。
    4. 对于比较频繁的查询操作,虽然NIntegrateQuery本身的查询性能是非常好的,但是,如果可能,还是建议尽可能使用存储过程。
    5. 对于所有的写操作,虽然NIntegrateQuery提供了一个基于DataAdapter.Update的简单实现,但是,出于性能考虑,原则上,建议使用存储过程,当然,您也可以选择同时使用包括LinqToSql在内的任意其他ORM组件。

    NIntegrateQuery支持的其它功能还包括:

    1. 混合支持多数据库、不同类型数据库的查询(正式版本将至少支持:SQL Server, Oracle, DB2和MySql)。
    2. 对不同的数据库,支持可扩展的,甚至是仅特定数据库支持的方法或语法。
    3. NIntegrate中包括了基于NIntegrateQuery的通用WCF查询服务的定义和默认实现,以及基于NIntegrateQuery和通用WCF查询服务的ASP.NET DataSource控件,方便进行数据绑定。

    后记

    这篇文章写完第一遍发布之前点预览时Firefox崩溃了,结果所有内容在Live Writer里老老实实重写了一遍,我哭~~~。为了避免同样的悲剧,我强烈建议您,千万不要在没有在其他地方备份前,在Firefox里点击FreeTextBox这个Rich Editor的“Preview”按钮。我是32bit Window Server 2008 + Firefox 3.0。切忌、切忌~~

    //我是结尾符

  • 相关阅读:
    SQL Server数据库高级进阶之事务实战演练
    ASP.NET Core使用Nginx搭建高可用分布式Web集群
    C#签名算法HS256和RS256实战演练
    ASP.NET (Core)WebApi参数传递实操演练
    基于Windows服务实现的亚马逊云S3文件上传
    ASP.NET Core WebApi如何动态生成树形Json格式数据
    SQL Server数据库高级进阶之分布式唯一ID生成实战演练
    ASP.NET Core WebApi分布式文件系统FastDFS实战演练
    .Net Core使用NLog记录日志到文件和数据库实战演练
    ASP.NET Core开源任务调度框架Hangfire实战演练
  • 原文地址:https://www.cnblogs.com/teddyma/p/1497903.html
Copyright © 2011-2022 走看看