zoukankan      html  css  js  c++  java
  • Linq to Sql与NHibernate数据库操作性能对比研究

    我写了两段测试程序来验证Linq to Sql 和NHibernate的性能,做了很久的测试,以下是文章的截选。发给大家参考一下,大家多指教。

    测试思路:

     

     

    同时来编写NHibernateLinq to Sql测试程序,并对比其各模块实现的代码。两个测试程序均按如下方式声明测试类

        [TestFixture]

        public class TestApp

    {

          [TestFixtureSetUp]

             初始化函数

          [Test]

             测试函数

          [TestFixtureTearDown]

         卸载函数

    ………

    }

     

    数据及测试软件准备

    数据存放于SQL SERVER 2005NHibernate版本为2.0,编程环境为VS.net 2008,程序采用NUint2.4.8单元测试工具来直观地获取运行时间(Execution Time),对于考查性能的指标。按照千、万、10万、100万量级递增的数据规模运行时间以秒记,精确到小数点后七位。对于每个测试模块,测试运行3次取后2次运行时间的平均值,尽可能排除数据库对单一应用程序的缓存和语句编译等因素的影响。

    操作

    ORM

    千条数据

    万条数据

    十万条数据

    百万条数据

    写入

    Linq to SQL

    0.7168726

    2.9009993

    24.7615404

    312.4021605

    NHiberante

    0.3241660

    01.8340702

    16.8427108

    217.5106473

    查询

    Linq to SQL

    0.7700709

    0.7906083

    1.0457957

    4.3646305

    NHiberante

    0.2678490

    0.5244701

    3.9022920

    43.3711542

    更新

    Linq to SQL

    1.3043570

    5.1352840

    44.4361433

    468.34

    NHiberante

    0.1090214

    4.2710070

    38.3539783

    401.7142972

    删除

    Linq to SQL

    1.4256575

    7.5339277

    66.3342046

    744.9148032

    NHiberante

    1.4565611

    5.9940426

    56.7348532

    614.4343719

     

     

     

     

     

     

     

     

     

      

     

    注:以上实验数据的测试硬件条件为 Intel Core Duo E4500,2G内存,320G7200转希捷硬盘。对两种产品均未采取任何形式的优化。

      

                结论:

    1)、Linq to SqlNHibernate这两种框架产品在批量更新和删除数据时性能表现十分差,与直接用ado.net进行操作在十万和百万数据量级时相差近百倍。虽从事实上,应用ORM类产品批量处理数据库的操作有背于面向对象的设计思想。但也可以使我们了解到,在应用ORM框架的数据库应用系统中应该采取更直接的操作方式解决此类操作的性能问题。

    2)、在十万条以内级别操作数据量的应用环境下,Linq to SqlNHibernate都能以可以较好的性能完成数据库操作。这种条件下NHibernate在读、写、更新、删除各项操作中均大幅度领先于微软的Linq to Sql,特别是在万条数据以内这个级别上NHibernate表现出来的性能几乎是Linq to Sql的一倍。操作的数据量越小这种性能的差异越明显。

    3)在单次操作十万数据、百万数据级别的数据库应用中,Linq to Sql的查询性能十分强劲,成绩几乎与ado.net直接操作数据库性能吃平。但其它操作性能仍被NHibernate大大领先。

  • 相关阅读:
    redis 键命令
    redis 数据类型
    java向word写入数据
    Eclipse发布到tomcat提示java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    Unable to locate Spring NamespaceHandler for XMLschemanamespace http://dubbo.apache.org/schema/dubbo
    5.Dubbo之Spring XML配置
    6.Dubbo之XML配置详解。
    7.Dubbo之最佳实践
    RESTful API实践
    Jav程序执行Linux命令
  • 原文地址:https://www.cnblogs.com/pcode/p/1332402.html
Copyright © 2011-2022 走看看