闲着无聊,测试了一下公司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的性能的更多相关文章

  1. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  2. 测试mktime和localtime_r性能及优化方法

    // 测试mktime和localtime_r性能及优化方法 // // 编译方法:g++ -g -o x x.cpp或g++ -O2 -o x x.cpp,两种编译方式性能基本相同. // // 结 ...

  3. loadrunner测试TCP协议服务器性能

    loadrunner测试TCP协议服务器性能 . 性能loadrunner测试c 最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loa ...

  4. 测试c语言函数调用性能因素之测试三

    函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针 ...

  5. Webbench、ab命令:做压力测试的工具和性能的监控工具

    DDOS攻击:???DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目 ...

  6. 『性能』测试一下 MSSqlHelper 的性能

    本文没啥技术含量,就是测试一下 MSSqlHelper 在 使用反射.不使用反射 的性能对比. 之后,不要问为什么不用 ORM 这类的东西 —— 会有另外的文章 介绍 自己这些年 自己的ORM 升级历 ...

  7. Mego(1) - NET中主流ORM框架性能对比

    从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...

  8. 运行Delphi XE10的MongoDB例程,测试Delphi插入记录性能

    Delphi XE10支持MongoDB的数据库,提供了个例子restaurants可批量导入数据. 本文对比Delphi例子与MongoDB自带的mongoimport导入批量数据的性能. 步骤: ...

  9. mysqlslap工具测试mysql DB的性能

    mysqlslap的一个主要工作场景就是对数据库服务器做基准测试.     测试方法 1.测试工具:mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具 ...

随机推荐

  1. 64bit Centos6.4编hadoop-2.5.1

    64bit Centos6.4编hadoop-2.5.1   1.说明 a)       因为从apache下载下来的tar.gz包是用32 bit编译的,全部假设用Linux 64作为hadoop的 ...

  2. Unity插件之NGUI学习(6)—— 关于Widget怎样加入触发事件(触发OnClick)

    NGUI中,Button本身就带有OnClick事件,可是Sprite,Label等( 也绑有Widget的)并没有触发事件,事实上NGUI的事件触发都必须加入Box Collider,并勾选Is T ...

  3. 通过SMTP协议来发送邮件

    简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输email的标准. SMTP是一个相对简单的基于文本的协议.在其之上指定了 ...

  4. C++中避免内存泄露常见的解决方式

    常见内存泄露及解决方式-选自ood启发录 new/delete, array new/arrray delete匹配 case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! ...

  5. 左右lcm,gcd一些性质

    两个整数a,b  他们的最大公约数为n  最小公倍数为m  则有 a,b都能分解为有限个素数的积               12 = 2^2 * 3^1 * 5^0 , 30 = 2^1 * 3^1 ...

  6. java中string和int互相转化

    1 怎样将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  7. MVC4新功能...压缩和合并js文件和样式文件

    1.在App_Start文件夹中BundleConfig.cs类中添加相应的文件 1.1bundles.Add(new ScriptBundle("~/bundles/adminJs&quo ...

  8. Hadoop-2.4.1完全分布式环境搭建

      Hadoop-2.4.1完全分布式环境搭建   Hadoop-2.4.1完全分布式环境搭建 一.配置步骤如下: 主机环境搭建,这里是使用了5台虚拟机,在ubuntu 13系统上进行搭建hadoop ...

  9. UiAutomator源码分析之获取控件信息

    根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...

  10. 设计模式---订阅发布模式(Subscribe/Publish)

    设计模式---订阅发布模式(Subscribe/Publish) 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象.这个主题对象在自身状态变化时,会通知所有订阅者对象,使 ...