ORM for Net主流框架汇总与效率测试
框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论)。
ORM框架:Object/Relation Mapping(对象/关系 映射)的缩写,易于理解的模型化数据的方法。简单的说就是把数据库的关系型数据类型转换为用对象型程序控制的框架类型。
今天研究的orm框架如下:
1.NHibernate(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/15/2177830.html)
2.iBatis(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/26/2192155.html)
3.NBear(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/21/2184376.html)
4.SubSonic(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/22/2185152.html)
5.GentleNet(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/16/2179157.html)
目录:
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
2)、测试框架简介。
Stopwatch watch = new Stopwatch();
watch.Start();
Parallel.For(, , i =>
{
// ...业务
});
watch.Stop();
Response.Write(watch.ElapsedMilliseconds);
3)、测试CRUD结果表格对比。
添加功能测试表:
|
操作 |
添加 |
||||
|
数据量(万条) |
10w |
||||
|
测试次数 |
10次 |
||||
|
框架名称 |
GentleNet |
NBear |
iBate |
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 |
iBate |
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 |
iBate |
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 |
iBate |
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:iBate 并发: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:iBate 并发: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:iBate 并发:39,854ms 非并发:37,339(非并发下查询效率最高)ms
Top4:NBear 并发:94,265ms 非并发:157,676ms
Top5:NHibernate 非并发:1,438,398ms
========================================================
删除排行:
Top1:SubSonic 并发:28,223ms 非并发:97,846ms
Top2:iBate 并发: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
优点: 效率比较高,尤其是非并发下效果很高,比较稳定。
缺点:配置文件比较多,t-sql在每个配置文件里面写,条件查询比较麻烦。
SubSonic
优点:删除和查询效果很好,添加比较慢。
缺点:语法比较接近Linq,语法自成一派比较不满意。
NHibernate
优点:覆盖功能比较全,稳定性好,集成性能好,使用比较广泛,支持t-sql和hql语法。
缺点:配置比较多,比较麻烦,效率比较慢。
NBear
优点:配置最简单。
缺点:操作语法不成熟,不支持t-sql,使用起来不方便,已经很久没有更新了。
ps:大家根据测试的结果自行选择合适的框架。
ORM for Net主流框架汇总与效率测试的更多相关文章
- ORM for Net主流框架汇总
ORM框架:Object/Relation Mapping(对象/关系 映射)的缩写,易于理解的模型化数据的方法.简单的说就是把数据库的关系型数据类型转换为用对象型程序控制的框架类型. 框架优缺点分析 ...
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- 前端Js框架 UI框架汇总 特性 适用范围 选择
身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 关于Linux主流框架运维工作剖析
LINUX是开源的,这也是最主要的原因,想学Windows,Unix对不起,没有源代码.也正是因为这样,LINUX才能够像雪球一样越滚越大,发展到现在这种规模.今天将为大家带来关于Linux主流框架运 ...
- ASP.NET Core 企业级开发架构简介及框架汇总 (转载)
ASP.NET Core 企业开发架构概述 企业开发框架包括垂直方向架构和水平方向架构.垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序.水平方向架构是指将大应用分成 ...
- 前端Js框架汇总(工具多看)
前端Js框架汇总(工具多看) 一.总结 一句话总结: 二.前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领 ...
随机推荐
- 20155303 2016-2017-2 《Java程序设计》第五周学习总结
20155303 2016-2017-2 <Java程序设计>第五周学习总结 教材学习中的问题和解决过程 『问题一』:受检异常与非受检异常 『问题一解决』: 受检异常:这种在编译时被强制检 ...
- [CEOI2015 Day2]世界冰球锦标赛 (双向搜索)
题目描述 [CEOI2015 Day2]世界冰球锦标赛译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.Bobek ...
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...
- Windows入侵问题排查
1.深入分析,查找入侵原因 1.1 检查帐户和弱口令 1.查看服务器已有系统或应用帐户是否存在弱口令 检查说明:主要检查系统管理员帐户.网站后台帐户.数据库帐户以及其他应用程序(FTP.Tomcao. ...
- LTE:eMBMS架构
一个MBSFN区域是由一个或多个传输相同内容的小区组成的特殊区域.如图1所示,小区8和9都属于MBSFN区域C.一个MBSFN区域可由多个小区组成,一个小区也可以属于多个(至多8个,从36.331中的 ...
- 公共语言运行库(CLR)开发系列课程(2):Pinvoke 进阶 学习笔记
上一章地址 API版本 具有字符串参数的API通常有两种版本 GetWindowText GetWindowTextA GetWindowTextW 缺省情况下CLR会自动寻找合适的匹配 CharSe ...
- 『记录』Android参考资料
欢迎留言推荐好的教程.资料.博客及作者等. 『记录』Android参考资料 1.前期环境 Android Studio使用Git Android Studio快捷键总结 Android Studio及 ...
- 网易与Google合作发布开源UI自动化测试方案 牛逼:Google 方面评价,这可能是目前世界上最好的 Android 游戏自动化测试方案。
美西时间 3 月 19 日,在 GDC 开幕第一天的 Google 开发者专场,Google 发布了一款由网易研发的 UI 自动化测试方案:Airtest Project.Google 方面评价,这可 ...
- PHP使用某个键值对二维数组排序
$arr=[ array( 'name'=>'A', 'age'=>28 ), array( 'name'=>'B', 'age'=>14 ), array( 'name'=& ...
- final修饰的地址不能被修改
package final0; /* * 顾客 */public class Customer { // 属性 String name; int age; // 父类object的方法 public ...