个人感觉在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框架对比的更多相关文章

  1. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

  2. 各种ORM框架对比(理论篇,欢迎来观摩)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  3. 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  4. 5 -- Hibernate的基本用法 --1 3 流行的ORM框架简介

    ⊙ JPA : JPA本身只是一种ORM规范,并不是ORM产品.它是Java EE规范制定者向开源世界学习的结果.JPA实体与Hibernate PO十分相似,甚至JPA实体完全可作为Hibernat ...

  5. .Net 常用ORM框架对比:EF Core、FreeSql、SqlSuger

    前言: 最近由于工作需要,需要选用一种ORM框架,也因此对EF Core.FreeSql.SqlSuger作简单对比.个人认为各有有优势,存在即合理,不然早就被淘汰了是吧,所以如何选择因人而议.因项目 ...

  6. Dapper - .Net 环境下一个简单对象映射的框架

    本文内容 特点 性能 参数化的查询 List 支持 缓存和非缓存的 readers 多个映射 多个结果 存储过程 Ansi Strings 和 varchar 限制和注意事项 Dapper 能运行在我 ...

  7. 基于python3环境下搭建Robot Framework 自动化测试框架(一)

    大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...

  8. 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr

    1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ...

  9. 【C#】ORM框架

    ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁. Java典型的ORM框架有个:Hibernate,my ...

随机推荐

  1. 《Entity Framework 6 Recipes》中文翻译系列 (39) ------ 第七章 使用对象服务之配置模型和使用单复数服务

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-3  配置模型 问题 你想了解配置模型中的各种选项. 解决方案 当你添加一个AD ...

  2. java compiler level does not match the version of the installed java project facet 解决方案

    项目出现 java compiler level does not match the version of the installed java project facet 错误,一般是项目移植出现 ...

  3. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  4. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

  5. Android之控件使用

    Android系统为我们提供了大量的控件,例如:开关控件.单选按钮.多选按钮.单选菜单等等,那么这些控件如何使用呢?本篇我将带领大家一道学习一下如何使用这些控件.所谓无图无真相,先让大家看一下效果图: ...

  6. Razor Engine,实现代码生成器的又一件利器

    Razor Engine,之前仅仅是ASP.NET MVC的一种View引擎,目前已经完全成为一种可以独立使用的模版引擎,并且已经成为了CodePlex上一个开源的项目(http://razoreng ...

  7. 升级到Windows10

    1.Windows10的优点 2.需要安装的软件 实用软件: Firefox浏览器 Chrome浏览器 有道云笔记 Adobe Reader Adobe Flash Adobe PhotoShop 编 ...

  8. 窥探Swift之新添数据类型元组与可选值

    今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...

  9. ARC内存管理机制详解

    ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...

  10. Callbacks vs Events

    前言:本文翻译自Dean Edwards的一篇文章,原文地址:http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/. 文章主要指出了 ...