CYQ.Data 批量添加数据性能测试(每秒千、万)
今天有网友火晋地同学进了CYQ.Data官方群了,他正在折腾了一个各大ORM性能测试的比较的软件,如下图

折腾的种类也不少:

感觉这软件折腾的不错~~~值的期待~~~
另外,他指出CYQ.Data 在他的软件里表现不佳~~~~
所以我要了他的测试实例看看是怎么写的测试代码:

测试的过程,大体是开了N个线程,循环N次执行这样的函数。
找到表现不佳的原因,并解决:
中间纷纷绕绕的讲了一些各大ORM测试的实例编写不同问题,不过有一句,倒引起了我的注意,说平均400毫秒左右。
于是我本地测试了一下,结果找出AOP读取配置文件的一个小BUG,这个小BUG在每次new MAction时产生个被捕获的小异常,这个小异常不影响使用,但会占用2毫秒以上时间~~~
所以整个评测都是不断的new MAction的情况,就是大事件了,这就是整体评测都不佳的原因了。
OK,修正这个小Bug后,下面来演示一下批量插入功能:
看看1万条数据,插入需要多长时间:
数据库为MSSQL 2005 CPU为i3,4G内存,数据表Consumer共4个字段。
每个示例前后都会truncate table Consumer;
第一种编码方法:通过不断的new MAction来实现插入,1万条用了6秒多,平均每秒插入1600条左右:

第二种编码方法:把for往里面移动,先不开启事务,1万条用了4秒多,平均每秒插入2500条左右:

第三种编码码方式,开启启事务呢,1万条用了2秒多,平均每秒插入4000条左右:

第四种编码方式:使用MDataTable的实现批量插入,1万条用了0.6秒多,平均每秒插入2万条左右:

事实上,时间是花在数据的实体转Table的过程,如果把这一块时间分出,只计算数据库批量插入的时间:
10万条用了0.8秒多,平均每秒插入10万条以上:

总结:
今天的测试,仅是做为样式供参考,不同的编码方式,实际上产生的性能点不同的,根据项目需要编程才是重点。
从07年开始写ORM框架,大大小小的框架写过很种风格,但真正的精华作品,却仅此一种。
另外其它多种ORM类型的比较,就等火晋地同学之文章了。
CYQ.Data 批量添加数据性能测试(每秒千、万)的更多相关文章
- CYQ.Data 批量添加数据性能测试(每秒千、万)---003
原文地址:https://www.cnblogs.com/cyq1162/p/3216267.html 今天有网友火晋地同学进了CYQ.Data官方群了,他正在折腾了一个各大ORM性能测试的比较的软件 ...
- .Net中批量添加数据的几种实现方法比较
在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...
- ADO.NET- 中批量添加数据的几种实现方法比较
在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)
继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...
- Yii2如何批量添加数据
批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然, ...
- ThinkPHP批量添加数据和getField()示例
批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...
- arcgis python arcpy add data script添加数据脚本
arcgis python arcpy add data script添加数据脚本mxd = arcpy.mapping.MapDocument("CURRENT")... df ...
- thinkphp3.2 批量添加数据
这是我遇到的thinkphp3.2 当中最让我无语的坑 批量添加数据有个方法是 addAll() 这个方法一定要注意数组的键名,一定要整齐!!! 可以在存入数据前,用ksort()方法将数组的键名排序 ...
随机推荐
- PHP 使用分页方法修改多数据字段
这个标题听起来很别扭,需求是这样的.mysql中的customer表有5000条数据.现在要给customer表添加一个order_num 字段,客户每下单一次就update这个字段+1. 是的,新增 ...
- javascrip中cookie的使用详细分析
JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求. cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由J ...
- Android 常用代码
1.单元测试 然而可以直接建立单元测试 <uses-library android:name="android.test.runner"/> 放在application ...
- 学习微信小程序之css10外边距
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDFS操作
HDFS操作 1.shell 1.1 创建目录 hadoop fs -mkdir 目录名(其中/为根目录) 1.2 遍历目录 hadoop fs -ls 目录名 1.3 删除目录 hadoop fs ...
- Spring的事务管理
事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...
- 注解 @RequestParam,@RequestHeader,@CookieValue,Pojo,servlet原生API
1.@RequestParam 我们的超链接:<a href="springMvc/testRequestParam">testRequestParam</a&g ...
- STL插入删除和查询测试
博客园的markdown不知道怎么插入C++代码,只好放弃了..本文在我的blog发布:http://jwk000.github.io/2015/09/02/20150902/
- angularJS(7)
服务:AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务. 最常用的服务:$location 服务, $http 服务 ...
- Cucumber(一): Preparation
Every time I wrote some code in ruby and executed our cucumber features I craved for something simil ...