原文地址:https://www.cnblogs.com/cyq1162/p/3216267.html

今天有网友火晋地同学进了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 批量添加数据性能测试(每秒千、万)---003的更多相关文章

  1. CYQ.Data 批量添加数据性能测试(每秒千、万)

    今天有网友火晋地同学进了CYQ.Data官方群了,他正在折腾了一个各大ORM性能测试的比较的软件,如下图 折腾的种类也不少: 感觉这软件折腾的不错~~~值的期待~~~ 另外,他指出CYQ.Data 在 ...

  2. .Net中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  3. ADO.NET- 中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  4. EF批量添加数据性能慢的问题的解决方案

    //EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...

  5. CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)

    继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...

  6. Yii2如何批量添加数据

    批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然, ...

  7. ThinkPHP批量添加数据和getField()示例

    批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...

  8. arcgis python arcpy add data script添加数据脚本

    arcgis python arcpy add data script添加数据脚本mxd = arcpy.mapping.MapDocument("CURRENT")... df ...

  9. thinkphp3.2 批量添加数据

    这是我遇到的thinkphp3.2 当中最让我无语的坑 批量添加数据有个方法是 addAll() 这个方法一定要注意数组的键名,一定要整齐!!! 可以在存入数据前,用ksort()方法将数组的键名排序 ...

随机推荐

  1. 磁盘 -> 硬盘 -> c盘 && 内存

    磁盘是计算机的外部存储器,分为两类,一类是硬盘,一类是软盘. (附:计算机的存储器有两类,一类是内部存储器(内存条是用半导体材料做成的),断电不会保存当前工作:一类是外部存储器,断了电也能可以保存.) ...

  2. MySQL Inception--原理和注意事项

    ========================================================= MySQL Inception原理图 ======================= ...

  3. streamsets 集成 cratedb 测试

    我们可以集成crate 到streamsets 中可以实现强大的数据导入,数据分析能力. 演示的是进行csv 文件的解析并输出到cratedb 环境使用docker && docker ...

  4. EF Codefirst方式数据库维护操作

    关于EF codefirst方式数据库维护操作 1.数据实体更新 2.打开pm - 锁定项目:MLearning.Data 3.执行命令 : add-migration [名称] 4.检查无误后,执行 ...

  5. Java Web Service 学习笔记

    一.服务端 1. 创建Java工程 2. 创建接口HostipalServiceInterface package ws_server; import javax.jws.WebMethod; imp ...

  6. 抓包软件Packet Sniffer的使用

    1. 要用专门的一块zigbee插到底板上,仿真器连到CC Debug接口. 2. 打开软件,按下仿真器的复位键,可以识别到设备. 3. 进行抓包(抓到的是网络中其他节点的信息)

  7. CentOS Linux解决Device eth0 does not seem to be present 但是没有发现eth1

    http://www.linuxidc.com/Linux/2012-12/76248.htm 此标题已经是有人写过的了.但是为什么拿来重写? 我复制完,没有发现有eth1这个网卡 为什么呢?需要选中 ...

  8. 多线程实现ping扫描

    代码: # coding=utf-8 import subprocess from Queue import Queue import threading class Pinger(object): ...

  9. appium+python自动化38-adb shell按键操作(input keyevent)

    前言 接着上篇介绍input里面的按键操作keyevent事件,发送手机上常用的一些按键操作 keyevent 1.keyevent事件有一张对应的表,可以直接发送对应的数字,也可以方式字符串,如下两 ...

  10. EasyMall 项目记录-环境搭建

    一.搭建项目运行的环境 (1)修改hosts文件 更改:C:\Windows\System32\drivers\etc目录下hosts文件 添加:127.0.0.1        www.easyma ...