zoukankan      html  css  js  c++  java
  • Net环境下比较流行的ORM框架对比

           个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据。在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的ORM持怀疑态度,你还可以使用来自微软的实现、根正苗红的Linq或者EntityFramework。


           大部分从早期就开始使用.NET开发的程序员可能对ADO.NET有种迷恋,使用ADO.NET可以充分将我们早期的SQL知识发挥得淋漓尽致,并且出于对性能的考虑,有些人对.NET中的ORM还保持一种观望态度,包括我自己也是这种态度。不过即使在实际开发中不用,并不代表我们不能去了解和比较这些技术,任何事物的出现和消亡总有其原因的,我们可以了解它们的优点和长处。所以本人抽出了几个周末的时间分别用NBear、NHibernate、GentleNet,IBatis.Net和SubSonic来实现对数据库单表数据的创建、读取、更新和删除操作,也就是所谓的CRUD(C:Create/R:Read/U:Update/D:Delete)。

     

    目录:

    1)、效率测试环境介绍。

    2)、测试框架简介。

    3)、测试CRUD结果表格对比。

    4)、测试CRUD排行。

    5)、框架优缺点分析。


    正文:

    1)、效率测试环境介绍。

    采用netframework 4.0 Web网站项目,使用Stopwatch进行执行时间统计,使用Parallel对象实现并发操作。为了测试的接近实际型,我执行的时候关掉了电脑上的所有程序,除测试程序,10次相同环境下重复测试10万条数据量的平均值。

    测试数据库T-Sql

     

    create database OrmDB
    go
    use OrmDB
    go
    create table OrmTable
    (
    id int identity primary key,
    infoName varchar(250) not null,
    infoDesc text not null,
    createTime datetime default Convert(varchar(50),getdate(),120)
    )
    go
    复制代码
    create database OrmDB
    go
    use OrmDB
    go
    create table OrmTable
    (
    id int identity primary key,
    infoName varchar(250) not null,
    infoDesc text not null,
    createTime datetime default Convert(varchar(50),getdate(),120)
    )
    go
    复制代码


    2)、测试框架简介。

    Stopwatch watch = new Stopwatch();

    watch.Start();

    Parallel.For(0, 100000, i =>

    {

        // ...业务

    });

    watch.Stop();

    Response.Write(watch.ElapsedMilliseconds);

    3)、测试CRUD结果表格对比。

    添加功能测试表:

    操作

    添加

    数据量(万条)

    10w

    测试次数

    10

    框架名称

    GentleNet

    NBear

    iBatis.Net

    SubSonic

    NHibernate

    并发执行时间(ms

    36,731

    113,793 

    36,321

    56,342 

    未测

    非并发执行时间(ms

    115,875

    223,768 

    100,719

    124,844 

    1,247,572

     


    修改功能测试表:

    操作

    修改

    数据量(万条)

    10w

    测试次数

    10

    框架名称

    GentleNet

    NBear 

    iBatis.Net

    SubSonic

    NHibernate

    并发执行时间(ms)

    25,985

    140,779 

    33,366

    36,916 

    未测

    非并发执行时间(ms)

    98,868

    279,851 

    102,875

    102,821 

    1,226,506

     


    查询功能测试表:

    操作

    查询

    数据量(万条)

    10w

    测试次数

    10

    框架名称

    GentleNet

    NBear 

    iBatis.Net

    SubSonic 

    NHibernate

    并发执行时间(ms)

    19,776

    94,265 

    39,854

    26,784 

    未测

    非并发执行时间(ms)

    54,515

    157,676 

    37,339

    67,344 

    1,438,398

     


    删除功能测试表:

    操作

    删除

    数据量(万条)

    10w

    测试次数

    10

    框架名称

    GentleNet

    NBear 

    iBatis.Net

    SubSonic 

    NHibernate

    并发执行时间(ms)

    33,802

    101,516 

    31,964

    28,223 

    未测

    非并发执行时间(ms)

    102,107

    211,105 

    88,420

    97,846 

    1,230,465

     


    4)、CRUD测试排行。

    以下为10万条数据的查询排行,单位为毫秒(ms)。

    ========================================================

    增加排行:

    Top1:iBatis.net 并发:36,321ms 非并发:100,719ms

    Top2:GentleNet 并发:36,731ms 非并发:115,875ms

    Top3SubSonic 并发:56,342ms 非并发:124,844ms

    Top4NBear 并发:113,793ms 非并发:223,768ms

    Top5NHibernate 非并发:1,247,572ms

     

    ========================================================

    修改排行:

    Top1GentleNet 并发:25,985ms 非并发:98,868ms

    Top2iBatis.net 并发:33,366ms 非并发:102,875ms

    Top3SubSonic 并发:36,916ms 非并发:124,844ms

    Top4NBear 并发:113,793ms 非并发:102,821ms

    Top5NHibernate 非并发:279,851ms

     

    ========================================================

    查询排行:

    Top1GentleNet 并发:19,776ms 非并发:54,515ms

    Top2SubSonic 并发:26,784ms 非并发:67,344ms

    Top3iBatis.net 并发:39,854ms 非并发:37,339(非并发下查询效率最高)ms

    Top4NBear 并发:94,265ms 非并发:157,676ms

    Top5NHibernate 非并发:1,438,398ms

     

    ========================================================

    删除排行:

    Top1SubSonic 并发:28,223ms 非并发:97,846ms

    Top2iBatis.net 并发:31,964ms 非并发:88,420ms

    Top3GentleNet 并发:33,802ms 非并发:102,107ms

    Top4NBear 并发:101,516ms 非并发:211,105ms

    Top5NHibernate 非并发:1,230,465ms

    ========================================================

     

    5)、框架优缺点分析。

    Gentle.NET

    优点:支持t-sql,语法简单方便,效率高。

    缺点:依赖代码生成器生成每个实体类。


    iBatis.net

    优点效率比较高,尤其是非并发下效果很高,比较稳定。

    缺点:配置文件比较多,t-sql在每个配置文件里面写,条件查询比较麻烦。


    SubSonic

    优点:删除和查询效果很好,添加比较慢。

    缺点:语法比较接近Linq,语法自成一派比较不满意。


    NHibernate

    优点:覆盖功能比较全,稳定性好,集成性能好,使用比较广泛,支持t-sqlhql语法。

    缺点:配置比较多,比较麻烦,效率比较慢。


    NBear

    优点:配置最简单。

    缺点:操作语法不成熟,不支持t-sql,使用起来不方便,已经很久没有更新了。


    ps:大家根据测试的结果自行选择合适的框架。

  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/5995592.html
Copyright © 2011-2022 走看看