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
Top3:SubSonic 并发:56,342ms 非并发:124,844ms
Top4:NBear 并发:113,793ms 非并发:223,768ms
Top5:NHibernate 非并发:1,247,572ms
========================================================
修改排行:
Top1:GentleNet 并发:25,985ms 非并发:98,868ms
Top2:iBatis.net 并发:33,366ms 非并发:102,875ms
Top3:SubSonic 并发:36,916ms 非并发:124,844ms
Top4:NBear 并发:113,793ms 非并发:102,821ms
Top5:NHibernate 非并发:279,851ms
========================================================
查询排行:
Top1:GentleNet 并发:19,776ms 非并发:54,515ms
Top2:SubSonic 并发:26,784ms 非并发:67,344ms
Top3:iBatis.net 并发:39,854ms 非并发:37,339(非并发下查询效率最高)ms
Top4:NBear 并发:94,265ms 非并发:157,676ms
Top5:NHibernate 非并发:1,438,398ms
========================================================
删除排行:
Top1:SubSonic 并发:28,223ms 非并发:97,846ms
Top2:iBatis.net 并发:31,964ms 非并发:88,420ms
Top3:GentleNet 并发:33,802ms 非并发:102,107ms
Top4:NBear 并发:101,516ms 非并发:211,105ms
Top5:NHibernate 非并发:1,230,465ms
========================================================
5)、框架优缺点分析。
Gentle.NET
优点:支持t-sql,语法简单方便,效率高。
缺点:依赖代码生成器生成每个实体类。
iBatis.net
优点: 效率比较高,尤其是非并发下效果很高,比较稳定。
缺点:配置文件比较多,t-sql在每个配置文件里面写,条件查询比较麻烦。
SubSonic
优点:删除和查询效果很好,添加比较慢。
缺点:语法比较接近Linq,语法自成一派比较不满意。
NHibernate
优点:覆盖功能比较全,稳定性好,集成性能好,使用比较广泛,支持t-sql和hql语法。
缺点:配置比较多,比较麻烦,效率比较慢。
NBear
优点:配置最简单。
缺点:操作语法不成熟,不支持t-sql,使用起来不方便,已经很久没有更新了。
ps:大家根据测试的结果自行选择合适的框架。
Net环境下比较流行的ORM框架对比的更多相关文章
- ORM框架对比以及Mybatis配置文件详解
ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...
- 各种ORM框架对比(理论篇,欢迎来观摩)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- 5 -- Hibernate的基本用法 --1 3 流行的ORM框架简介
⊙ JPA : JPA本身只是一种ORM规范,并不是ORM产品.它是Java EE规范制定者向开源世界学习的结果.JPA实体与Hibernate PO十分相似,甚至JPA实体完全可作为Hibernat ...
- .Net 常用ORM框架对比:EF Core、FreeSql、SqlSuger
前言: 最近由于工作需要,需要选用一种ORM框架,也因此对EF Core.FreeSql.SqlSuger作简单对比.个人认为各有有优势,存在即合理,不然早就被淘汰了是吧,所以如何选择因人而议.因项目 ...
- Dapper - .Net 环境下一个简单对象映射的框架
本文内容 特点 性能 参数化的查询 List 支持 缓存和非缓存的 readers 多个映射 多个结果 存储过程 Ansi Strings 和 varchar 限制和注意事项 Dapper 能运行在我 ...
- 基于python3环境下搭建Robot Framework 自动化测试框架(一)
大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...
- 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr
1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ...
- 【C#】ORM框架
ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁. Java典型的ORM框架有个:Hibernate,my ...
随机推荐
- error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”
今日VS2012 C++编译出现一堆错误: > 正在生成代码... >Code.obj : error LNK2005: "public: __thiscall std::_Co ...
- WCF 安全性 之 自定义证书验证
案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...
- EF for Oracle,dotConnect for Oracle,ODP.NET
dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...
- Constraint6:更新外键约束(Foreign Key Constraint)的引用列
在SQL Server中,表之间存在引用关系,引用关系通过创建外键约束(Foreign Key Constraint)实现.如果一个Table中的column被其他Table引用,那么该表是参考表,或 ...
- CSS系列:CSS文字样式
1. 设置字体 在CSS中字体通过font-family属性来设置. font-family: Verdana, Arial, Helvetica, sans-serif; 上面的字体设置告诉浏览器首 ...
- lua中的数据类型
lobject.h: lobject.h: 其中使用GCObject表示的数据类型是需要lua 的gc记录的. lstate.h: lobject.h:
- DIV元素水平和垂直居中
在前端开发过程中,经常要对元素进行居中设置.一般有水平居中,和垂直居中.一般设置水平居中简单.基本是margin:0 auto,就可以了.但是垂直居中,我们有时会觉得使用vertical-align, ...
- Objective-C中的深拷贝和浅拷贝
在Objective-C中对象之间的拷贝分为浅拷贝和深拷贝.说白了,对非容器类的浅拷贝就是拷贝对象的地址,对象里面存的内容仍然是一份,没有新的内存被分配.对非容器类的深拷贝就是重写分配一块内存,然后把 ...
- (十六)WebGIS中偏移补偿量引发的问题之探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在上一章里讲解地图平移功能的实现时,我在最后提出了两个问题: ...
- 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数
很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...