测试Data ORM的性能
闲着无聊,测试了一下公司ORM的性能,和其它的ORM相比,该有的都有了,不该有的也勉强塞了进去,总体考虑是并发与扩展性问题,譬如读写分离,消息总线服务整合,缓存内置。
测试机是I7,16G内存,这里只根据测试场景写了最简单的数据库操作测试。
采用了火地晋的测试工具,下面是测试代码
public class DataTest :ITest
{ public void Init()
{
} public bool Insert()
{
var _repository = new Repository<DbAccessLibTest.Model.Test>();
var model = new DbAccessLibTest.Model.Test();
model.Guid = Guid.NewGuid().ToString();
return _repository.Save(model, DbAccessLibTest.Model.Test._Guid) > ;
} public bool Update(string guid, string content)
{
var _repository = new Repository<DbAccessLibTest.Model.Test>();
var model = new DbAccessLibTest.Model.Test();
model.Content = content;
return _repository.Update(model, DbAccessLibTest.Model.Test._Guid == guid, DbAccessLibTest.Model.Test._Content) > ;
} public System.Data.DataTable Select(int count)
{
var _repository = new Repository<DbAccessLibTest.Model.Test>();
var list = _repository.Find(new QueryWhere(), count);
return null;
} public List<string> GetGuidList(int count)
{
var _repository = new Repository<DbAccessLibTest.Model.Test>();
var list = _repository.Find(new QueryWhere(), count, null, , DbAccessLibTest.Model.Test._Guid);
var guids = new List<string>();
foreach (var test in list)
{
guids.Add(test.Guid);
}
return guids;
} public bool Delete(string guid)
{
var _repository = new Repository<DbAccessLibTest.Model.Test>();
var model = new DbAccessLibTest.Model.Test();
model.Guid = guid;
return _repository.Delete(model) > ;
}
}
大致了解了一下,一下采用10/100/500/1000个线程,10个查询测试,节省时间,直接和ClownFish对比
| Inset | Delete | Update | Select | ||||||||||
| 平均值 | 最高 | 最低 | 平均值 | 最高 | 最低 | 平均值 | 最高 | 最低 | 平均值 | 最高 | 最低 | ||
| 10线程 | ClownFish | 279 | 406 | 221 | 304 | 359 | 268 | 262 | 361 | 158 | 8 | 9 | 7 |
| MyData | 475 | 720 | 249 | 527 | 727 | 244 | 462 | 705 | 253 | 10 | 13 | 8 | |
| 100线程 | ClownFish | 573 | 1246 | 154 | 646 | 1323 | 217 | 365 | 1117 | 140 | 8 | 22 | 6 |
| MyData | 599 | 1716 | 320 | 730 | 1899 | 303 | 784 | 1771 | 291 | 10 | 14 | 8 | |
| 500线程 | ClownFish | 7097 | 22106 | 225 | 3691 | 19673 | 97 | 4017 | 20029 | 158 | 9 | 35 | 7 |
| MyData | 591 | 1263 | 181 | 1416 | 8583 | 297 | 5556 | 27463 | 376 | 10 | 19 | 8 | |
| 1000线程 | ClownFish | 7967 | 30946 | 166 | 5502 | 21291 | 163 | 6300 | 28062 | 145 | 8 | 68 | 6 |
| MyData | 606 | 1242 | 249 | 577 | 2719 | 203 | 608 | 1043 | 270 | 10 | 22 | 8 | |

总体来看,公司的ORM性能较ClowFish差上20%-50%,但性能较稳定,1000线程测试全部跑完,无异常产生,ClowFish在200线程以内无异常,200线程以后,出现(执行错误,信息:超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。)异常,导致执行时间波动较大。
这个测试和原来公司压力测试结果差不多,压力测试公司ORM是直接ado.net执行的1.5倍性能左右。
测试Data ORM的性能的更多相关文章
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- 测试mktime和localtime_r性能及优化方法
// 测试mktime和localtime_r性能及优化方法 // // 编译方法:g++ -g -o x x.cpp或g++ -O2 -o x x.cpp,两种编译方式性能基本相同. // // 结 ...
- loadrunner测试TCP协议服务器性能
loadrunner测试TCP协议服务器性能 . 性能loadrunner测试c 最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loa ...
- 测试c语言函数调用性能因素之测试三
函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1, 调用函数帧指针 ...
- Webbench、ab命令:做压力测试的工具和性能的监控工具
DDOS攻击:???DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目 ...
- 『性能』测试一下 MSSqlHelper 的性能
本文没啥技术含量,就是测试一下 MSSqlHelper 在 使用反射.不使用反射 的性能对比. 之后,不要问为什么不用 ORM 这类的东西 —— 会有另外的文章 介绍 自己这些年 自己的ORM 升级历 ...
- Mego(1) - NET中主流ORM框架性能对比
从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...
- 运行Delphi XE10的MongoDB例程,测试Delphi插入记录性能
Delphi XE10支持MongoDB的数据库,提供了个例子restaurants可批量导入数据. 本文对比Delphi例子与MongoDB自带的mongoimport导入批量数据的性能. 步骤: ...
- mysqlslap工具测试mysql DB的性能
mysqlslap的一个主要工作场景就是对数据库服务器做基准测试. 测试方法 1.测试工具:mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具 ...
随机推荐
- EasyUI基础入门之Resiable(可缩放)
easyui的base插件学习已经进行到Resizable(可缩放)了.照旧看看easyui官网的API. Resiable 正如其字面意思一样(可伸缩),resiable主要是将一些html元素扩展 ...
- MVC 发布到 windows2003遇到 'System.Web.WebPages.Razor 错误提示
摘自: http://blog.csdn.net/lanqiao825/article/details/7840606 http://bbs.maticsoft.com/forum.php?mod=v ...
- JS对文档进行操作
对文档进行操作 创建节点 追加节点 删除节点 任务及例子 总结 对DOM的修改是,构建动态网页的关键.使用下面列举的方法,我们可以创建新的网页并且动态进行更改. 更多的DOM操作方法请查 DOM1 ...
- ARC注意的泄漏问题
--------- block中常见的泄漏问题 代码中block经常用到.例如网络请求?一些图形分析处理等,就是比较耗时的操作,多线程gcd然后进行操作. 这个时候,会使用block进行处理,然后调用 ...
- java之JAVA异常
异常的分类 1. 编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系. 此类异常在处理时必须进行声明或进行捕捉 这 ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- SQL点滴16—SQL分页语句总结
原文:SQL点滴16-SQL分页语句总结 今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 *from Orders orderid from Or ...
- 图解IntelliJ IDEA v13应用服务器的运行配置
初步了解IntelliJ IDEA v13应用服务器以后,接下来我们将继续设置应用服务器的运行配置. Artifacts是IDE在通过运行配置时部署的一个服务.Artifacts包括名称.类型.输出目 ...
- Ubuntu12.04环境搭建遇到的问题和建议(一个)
后的新公司需要在Ubuntu12.04在结构Android开发环境,在这个过程中,我们还是会遇到很多问题,这里记录.为了方便自己的未来,有人谁需要参考.从网络! 1. Q:在终端: sudo apt- ...
- INNO SETUP卸载程序中加入自定义窗体
原文:INNO SETUP卸载程序中加入自定义窗体 [Setup] AppName=My Program AppVerName=My Program v.1.2 DefaultDirName={pf} ...