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

posted on 2016-10-25 10:02  可均可可  阅读(25560)  评论(9编辑  收藏  举报