您好,欢迎访问一九零五行业门户网

海量数据插入数据库效率对比测试---ADO.NET下SqlBulkCopy()对比L

摘要:使用.net相关技术向数据库中插入海量数据是常用操作。本文对比ado.net和linq两种技术,分别使用sqlbulkcopy()和insertallonsubmit()方法进行操作。得出结论:相同插入工作量(1w条数据)插入效率相差200倍之巨! 测试场景: 准备两个数据库testdb和tes
摘要:使用.net相关技术向数据库中插入海量数据是常用操作。本文对比ado.net和linq两种技术,分别使用sqlbulkcopy()和insertallonsubmit()方法进行操作。得出结论:相同插入工作量(1w条数据)插入效率相差200倍之巨!
测试场景:
准备两个数据库testdb和testdb2,有表:t_users。表结构如下图所示:
sqlbulkcopy()插入方法如下:
private static stopwatch insertusingsqlbulkcopy(list 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 _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方法。
相关源码下载地址:http://download.csdn.net/detail/fanrong1985/8130953
其它类似信息

推荐信息