• 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:大家根据测试的结果自行选择合适的框架。

  • 相关阅读:
    迭代器生成器
    eval()
    【剑指offer】调整数组数字位置
    【剑指offer】二进制中1的个数
    【剑指offer】斐波那契数列非递归求解第N项
    【剑指offer】两个栈实现队列
    【剑指offer】逆序输出链表
    【剑指offer】字符串替换
    【剑指offer】规则二维数组查找
    Java转型
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/5995592.html
Copyright © 2020-2023  润新知