海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()
摘要:使用.NET相关技术向数据库中插入海量数据是经常使用操作。本文对照ADO.NET和LINQ两种技术。分别使用SqlBulkCopy()和InsertAllOnSubmit()方法进行操作。
得出结论:同样插入工作量(1w条数据)插入效率相差200倍之巨!
測试场景:
准备两个数据库TestDb和TestDb2。有表:T_Users。表结构例如以下图所看到的:
SqlBulkCopy()插入方法例如以下:
private static Stopwatch InsertUsingSqlBulkCopy(List<UserInMemory> list)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("UserName");
for (int i = 0; i < list.Count; i++)
{
DataRow row = dt.NewRow();
row["ID"] = list[i].ID;
row["UserName"] = list[i].UserName;
dt.Rows.Add(row);
}
using (SqlConnection con = new SqlConnection(connStr2))
{
con.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con))
{
try
{
bulkCopy.DestinationTableName = "dbo.T_UserName";
bulkCopy.ColumnMappings.Add("ID", "ID");
bulkCopy.ColumnMappings.Add("UserName", "UserName");
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally { con.Close(); }
}
}
stopWatch.Stop();
return stopWatch;
}
LINQ插入方法例如以下所看到的:
private static Stopwatch InsertUsingLINQ(List<T_User> _list)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
DataClasses1DataContext dataContext = new DataClasses1DataContext();
dataContext.T_Users.InsertAllOnSubmit(_list);
dataContext.SubmitChanges();
stopWatch.Stop();
return stopWatch;
}
使用上述代码分别导入1万条User数据进入数据库。
得到结果例如以下图所看到的:
同样插入工作量(1w条数据)前提下,结论:
1 ADO.NET下SqlBulkCopy()方法是LINQ TO SQL下InsertAllOnSubmit()方法插入效率相差266倍之巨!
2 LINQ使用便捷、代码简短、学习成本低。语言表达优雅;可是,假设对效率要求较高的海量数据相关操作优先推荐使用ADO.NET方法。
注意事项:
假设在导入数据过程中提示“超时相关操作”,请在WriteToServer()方法前增加例如以下代码:
bulkCopy.BulkCopyTimeout = 3600;
bulkCopy.BatchSize = 3000;
bulkCopy.WriteToServer(dt);
BatchSize为每次传输数量的设置。
BulkCopyTimeout为超时上限秒数。
相关源代码下载地址:http://download.csdn.net/detail/fanrong1985/8130953
海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()的更多相关文章
- sqlite3树形结构遍历效率对照測试
sqlite3树形结构遍历效率对照測试 一.缘起 项目数据结构:本人从事安防行业,视频监控领域.项目中会遇到监控点位的组织机构划分.暂时划分的巡逻点位等.这些相机点位.连同组织机构,它们在逻辑关系上构 ...
- 香蕉派路由功Openwrt、Android功耗对照測试
路由这个东西是要长期通电使用的,所以功耗也是须要关注的.如今香蕉派路由已经有了openwrt和android两个 系统,这两个系统的功耗是否一样呢? 測试工具:QUIGG的德国产功耗測试仪一个.手机充 ...
- Swift,Objective-C语言性能对照測试
原文发表于踏得网 Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养. 此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbe ...
- mongodb3.0 性能測试报告 二
mongodb3.0 性能測试报告 一 mongodb3.0 性能測试报告 二 mongodb3.0 性能測试报告 三 測试环境: 服务器:X86 pcserver 共6台 cpu: 单颗8核 ...
- JMeter使用记录1 -- JDBC測试
场景:使用jmeter对web应用和mysql数据库进行压力測试 JMeter是一款很强大的測试工具.能够用来測试web,数据库.从07年用过之后一直对它情有独钟,以下记录下在一个项目中对它的简单使用 ...
- Redis源代码分析(十三)--- redis-benchmark性能測试
今天讲的这个是用来给redis数据库做性能測试的,说到性能測试,感觉这必定是高大上的操作了.redis性能測试.測的究竟是哪方面的性能,怎样測试,通过什么指标反映此次測试的性能好坏呢.以下我通过源代码 ...
- Android性能測试 一些适用于Android Studio的代码审查和性能測试工具
导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...
- Java web測试分为6个部分
1.功能測试 2.性能測试(包含负载/压力測试)3.用户界面測试 4. 兼容性測试 5. 安全測试 6.接口測试 1 功能測试 1.1 链接測试 链接測试可分为三个方面. 首先,測试全部链接是 ...
- Maven实战(五)——自己主动化Web应用集成測试
自己主动化集成測试的角色 本专栏的上一篇文章讲述了Maven与持续集成的一些关系及详细实践,我们都知道,自己主动化測试是持续集成不可缺少的一部分,基本上,没有自己主动化測试的持续集成,都非常难称之为真 ...
随机推荐
- Halcon18 Linux For Armv7a 下载
Halcon18 Linux For Armv7a 下载地址:http://www.211xun.com/download_page_16.html HALCON 18 是一套机器视觉图像处理库,由一 ...
- mysql安装 以及跳过密码登录重设
修改MySQL的登录设置: vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/mysql ...
- [译]从列表或字典创建Pandas的DataFrame对象
原文来源:http://pbpython.com/pandas-list-dict.html 介绍 每当我使用pandas进行分析时,我的第一个目标是使用众多可用选项中的一个将数据导入Pandas的D ...
- Codeforces #1063C Dwarves, Hats and Extrasensory Abilities
题目大意 交互题. 输出平面上的一个点的坐标,交互程序给这个点染色(白或黑). 如此重复 $n$ 次($ 1\le n \le 30$). 要求输出的 $n$ 个点各不相同,并且不论交互程序怎样给它们 ...
- BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口 ...
- POJ3683 Priest John's Busiest Day 【2-sat】
题目 John is the only priest in his town. September 1st is the John's busiest day in a year because th ...
- rmmod: can't change directory to “3.4.79+”,no such file or directory
直接在/lib/modules目录下,在该目录下建立3.4.79+这个文件夹即可
- python和tensorflow安装
一.Python安装 python采用anaconda安装,简单方便,下载python3.6的anaconda linux64的sh安装文件. 1.bash Anaconda-2.1.0-Linux ...
- webstorm不能使用stylus
1.https://stackoverflow.com/questions/23583514/webstorm-8-showing-errors-for-a-correct-html-tag 2. & ...
- python常用内建函数
1.input 读取控制台的输入,输出的是字符串 2.enumerate 遍历数组的时候,能够将index 和item同时返回,返回的每一项包含index,item 3.isinstance(obje ...