测试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基准测试工具 ...
随机推荐
- 从Ubuntu12.04升级到Ubuntu 14.04之后,系统将无法启动
进入Ubuntu启动界面.通常有几个选项,Ubuntu,Ubuntu先进... 输入e键,进入grub的设置界面.将里面的ro改动为rw就可以. 以上能够启动,临时性的设置 可是为了永久保存这个设置, ...
- 【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析
原文:[高德地图API]从零开始学高德JS API(八)——地址解析与逆地址解析 摘要:无论是百度LBS开放平台,还是高德LBS开放平台,其调用量最高的接口,必然是定位,其次就是地址解析了,又称为地理 ...
- SSAS系列——【08】多维数据(程序展现Cube)
原文:SSAS系列--[08]多维数据(程序展现Cube) 1.引用DLL? 按照之前安装的MS SQLServer的步骤安装完成后,发现在新建的项目中“Add Reference”时居然找不到Mic ...
- 財智V6.0(完美破解序列号特别版)
財智V6.0(完美破解序列号特别版) 財智V6.0(完美破解序列号特别版) 財智6是眼下唯一在中央台报道的.比較成熟的国产理財软件.能全面管理家庭的日常收入.消费.储蓄 ...
- POJ 2255 Tree Recovery 二叉树恢复
一道和Leetcode的一道题目基本上一样的题目. 给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出. Leetcode上有给出后序和中序,恢复二叉树的. 只是 ...
- dom02
事件对象:在触发DOM上的事件时dou都会产生一个对象,事件对象event DOM中的事件对象 1)type属性 用于获取事件类型 2)target属性 用于获取事件目标 3)stopPropagat ...
- 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二
原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一4. 根据用户选择的组 ...
- ThinkPad E431/E531 ubuntu 14.04 安装无线网卡驱动
ubuntu系统装好之后无限网卡驱动并不能用.须要自己下载无线网卡驱动.以下是最简单的方法: sudo apt-get install linux-headers-generic build-esse ...
- C# 关闭子线程的方法
将子线程设定为IsBackGroud = true,程序关闭则自动死亡. 暴力手段:System.Environment.Exit(0).关闭时直接x掉所有线程. 子线程自行结束:子线程中自己判断.可 ...
- CSS学习笔记:文本换行显示(word-wrap)
在CSS3中新定义了文本换行属性,word-wrap: nomal属性值表示控制连续文本换行. break-word属性值表示内容将在边界内换行.如果需要,词内换行(word-break)也会发生. ...