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()方法将数组的键名排序 ...
随机推荐
- 转 centos虚拟机环境的构建。
转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/03/31/CentOs.html 一.前言 作为一个想从事j2ee后台开发的程序猿,l ...
- NetMQ(二): 请求响应模式 Request-Reply
ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...
- Nginx+FastCGI运行原理
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用.FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可 ...
- 解决java.beans.Introspector导致的内存泄漏
解决方案: 在WEB.XML 中配置监听器: <listener> <listener-class> org.springframework.web.util.Introspe ...
- Vue - class与style绑定
1.通过v-bind绑定一个class A:直接绑定 B:通过v-bind绑定一个对象 C:绑定一个返回对象的计算属性 D:绑定一个数组对象 2.绑定内联样式 A:直接子啊属性名上面绑定 B:绑定到一 ...
- JVM内存管理&GC
一.JVM内存划分 |--------------------|-------------PC寄存器-------| |----方法区 ---------|--------------java 虚拟机 ...
- datatable 加序号列
最近使用datatable时,发现没有像jqgrid那样生成序号列,在国外网站搜罗了一下还是很简单的,就要在aoColumns中添加一空列占位就行,然后再用fnRowCallback添加序号 示例如下 ...
- Kafka replication
Kafka replication kafka_replication_detailed_design_v2.pdf kafka Detailed Replication Design V3 Apac ...
- SOAPUI使用教程-REST源和方法
1. 添加REST服务.源和方法 一个REST服务包含任意数量相应的路径的可用源. 资源本身可以有尽可能多的子资源;子资源路径和所有的父路径链接起来. 首先创建一个新的REST服务在您的项目. 在导航 ...
- Leetcode Power of Two
Given an integer, write a function to determine if it is a power of two. 题目意思: 给定一个整数,判断是否是2的幂 解题思路: ...