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:大家根據測試的結果自行選擇合適的框架。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM