您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

.NET批量大数据插入性能分析及比较(1.准备工作)

2024/6/28 18:06:17发布18次查看
最近公司内训中,学员有datatable中批量大 数据 插入 数据 库的业务需求。 所以做了一个简单的demo, 分析 比较 下。 测试环境 os:windows 7 旗舰版 cpu:intel(r) pentium(r) dual cpu e2180 @2.00ghz ram:2.00gb 数据 插入 使用了以下几种方式 1. 逐条
最近公司内训中,学员有datatable中批量大数据插入数据库的业务需求。
所以做了一个简单的demo,分析比较下。
测试环境
os:windows 7 旗舰版
cpu:intel(r) pentium(r) dual cpu e2180 @2.00ghz
ram:2.00gb
数据插入使用了以下几种方式
1. 逐条数据插入
2. 拼接sql语句批量插入
3. 拼接sql语句并使用transaction
4. 拼接sql语句并使用sqltransaction
5. 使用dataadapter
6. 使用transactionscope及sqlbulkcopy
7. 使用表值参数
数据库使用sql server,脚本如下
create table testtable
(
id int
,name nvarchar(20)
)
程序中生成测试datatable结构和测试数据的类如下
public class tools { public static datatable makedatatable() { datatable table = new datatable(); //生成datatable的模式(schema) table.columns.add(id, type.gettype(system.int32)); table.columns.add(name, type.gettype(system.string)); //设置主键 table.primarykey = new datacolumn[] { table.columns[id] }; table.columns[id].autoincrement = true; table.columns[id].autoincrementseed = 1; table.columns[id].readonly = true; return table; } public static void makedata(datatable table, int count) { if (table == null) return; if (count
测试程序使用windows form,界面如下
使用log4net记录日志,默认插入记录数为40000条,每次插入1条,可在界面修改,使用system.diagnostics.stopwatch记录插入时间,每次测试后删除原表重建
窗体代码如下:
public delegate bool inserthandler(datatable table, int batchsize); public partial class frmbatch : form { private stopwatch _watch = new stopwatch(); public frmbatch() { initializecomponent(); } private void frmbatch_load(object sender, eventargs e) { txtrecordcount.text = 40000; txtbatchsize.text = 1; } //逐条数据插入 private void btninsert_click(object sender, eventargs e) { insert(dboperation.executeinsert, use sqlserver insert); } //拼接sql语句插入 private void btnbatchinsert_click(object sender, eventargs e) { insert(dboperation.executebatchinsert, use sqlserver batch insert); } //拼接sql语句并使用transaction private void btntransactioninsert_click(object sender, eventargs e) { insert(dboperation.executetransactioninsert, use sqlserver batch transaction insert); } //拼接sql语句并使用sqltransaction private void btnsqltransactioninsert_click(object sender, eventargs e) { insert(dboperation.executesqltransactioninsert, use sqlserver batch sqltransaction insert); } //使用dataadapter private void btndataadapterinsert_click(object sender, eventargs e) { insert(dboperation.executedataadapterinsert, use sqlserver dataadapter insert); } //使用transactionscope private void btntransactionscopeinsert_click(object sender, eventargs e) { insert(dboperation.executetransactionscopeinsert, use sqlserver transactionscope insert); } //使用表值参数 private void btntabletypeinsert_click(object sender, eventargs e) { insert(dboperation.executetabletypeinsert, use sqlserver tabletype insert); } private datatable initdatatable() { datatable table = tools.makedatatable(); int count = 0; if (int.tryparse(txtrecordcount.text.trim(), out count)) { tools.makedata(table, count); //messagebox.show(data init ok); } return table; } public void insert(inserthandler handler, string msg) { datatable table = initdatatable(); if (table == null) { messagebox.show(datatable is null); return; } int recordcount = table.rows.count; if (recordcount
全文链接:
.net批量大数据插入性能分析及比较(1.准备工作)
.net批量大数据插入性能分析及比较(2.普通插入与拼接sql批量插入)
.net批量大数据插入性能分析及比较(3.使用事务)
.net批量大数据插入性能分析及比较(4.使用dataadapter批量插入)
.net批量大数据插入性能分析及比较(5.使用sqlbulkcopy)
.net批量大数据插入性能分析及比较(6.使用表值参数)
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product