.NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
来源:互联网 发布:数据 战略资源 编辑:程序博客网 时间:2024/06/04 00:21
- #region 使用SqlBulkCopy
- public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize)
- {
- int count = dt.Rows.Count;
- string tableName = "TestTable";
- int copyTimeout = 600;
- bool flag = false;
- try
- {
- using (SqlConnection cn = new SqlConnection(connectionString))
- {
- using (TransactionScope scope = new TransactionScope())
- {
- cn.Open();
- using (SqlBulkCopy sbc = new SqlBulkCopy(cn))
- {
- //服务器上目标表的名称
- sbc.DestinationTableName = tableName;
- sbc.BatchSize = batchSize;
- sbc.BulkCopyTimeout = copyTimeout;
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- //列映射定义数据源中的列和目标表中的列之间的关系
- sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
- }
- sbc.WriteToServer(dt);
- flag = true;
- scope.Complete();//有效的事务
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex.Message);
- return false;
- }
- return flag;
- }
- #endregion
结果如下:
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:10;Time:10314;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:20;Time:4476;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:50;Time:2021;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:100;Time:1332;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:200;Time:978;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:400;Time:730;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:500;Time:649;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:600;Time:623;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:700;Time:669;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:800;Time:585;
Use SqlServer TransactionScope Insert;RecordCount:40000;BatchSize:1000;Time:681;
SqlBulkCopy原理是采用了SQL Server的BCP协议进行数据的批量复制,结合使用事务,就我们的案例而言,大约每批800条是平衡点,性能比逐条插入提高了100多倍,并前面同样使用事务批量插入的案例性能提升了7倍以上。
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
- .NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
- .NET批量大数据插入性能分析及比较(3.使用事务)
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- .NET批量大数据插入性能分析及比较(3.使用事务)
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- .NET批量大数据插入性能分析及比较(2.普通插入与拼接sql批量插入)
- .NET批量大数据插入性能分析及比较(2.普通插入与拼接sql批量插入)
- .NET批量大数据插入性能分析及比较(1.准备工作)
- .NET批量大数据插入性能分析及比较(1.准备工作)
- SQLBULKCOPY批量插入数据使用
- SqlBulkCopy快速批量大数据插入
- SqlBulkCopy批量数据插入
- SqlBulkCopy批量数据插入
- 关于A中用到B, B中用到A的问题
- eclipse启动了tomcat正常,但是页面一直报404
- K-D tree 数据结构
- 关于ruby安装git(或别网站)的安装包的443port错误(用homebrew做事例)Failed to connect to raw.github.com port 443:
- .NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- 理解 std::function 和 function::bind 的用法
- HTTP协议详解
- 蓝桥杯历届试题之回文数字
- Android的setTag 和getTAG
- C++类的静态成员使用示例
- 富婆激情陪聊qq号码是多少
- 安卓应用平台想要反超iOS?在中国好好表现吧
- CentOS 6 部署 Nginx + PHP5 服务器