.NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
2015-05-06 23:20
351 查看
#region 使用DataAdapter
public static bool ExecuteDataAdapterInsert(DataTable dt, int batchSize)
{
int count = dt.Rows.Count;
bool flag = false;
try
{
SqlConnection cn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("Insert into TestTable(Id, Name) Values(@Id, @Name)", cn);
cmd.Parameters.Add("@Id", SqlDbType.Int, 4, "Id");
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 20, "Name");
cmd.UpdatedRowSource = UpdateRowSource.None;
SqlDataAdapter da = new SqlDataAdapter();
da.InsertCommand = cmd;
da.UpdateBatchSize = batchSize;
cn.Open();
da.Update(dt);
cn.Close();
flag = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message);
return false;
}
return flag;
}
#endregion
结果如下:
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:10;Time:21569;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:20;Time:19607;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:50;Time:19647;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:100;Time:18649;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:200;Time:21823;
测试的结果让我比较失望,SqlDataAdapter会为每个修改行发送一条T-SQL命令,所以效率并不高。
而且再其他的方式中,都可以进行异步处理,SqlDataAdapter的Update()方法并不支持异步的结果,所以此方法不推荐
public static bool ExecuteDataAdapterInsert(DataTable dt, int batchSize)
{
int count = dt.Rows.Count;
bool flag = false;
try
{
SqlConnection cn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("Insert into TestTable(Id, Name) Values(@Id, @Name)", cn);
cmd.Parameters.Add("@Id", SqlDbType.Int, 4, "Id");
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 20, "Name");
cmd.UpdatedRowSource = UpdateRowSource.None;
SqlDataAdapter da = new SqlDataAdapter();
da.InsertCommand = cmd;
da.UpdateBatchSize = batchSize;
cn.Open();
da.Update(dt);
cn.Close();
flag = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message);
return false;
}
return flag;
}
#endregion
结果如下:
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:10;Time:21569;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:20;Time:19607;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:50;Time:19647;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:100;Time:18649;
Use SqlServer DataAdapter Insert;RecordCount:40000;BatchSize:200;Time:21823;
测试的结果让我比较失望,SqlDataAdapter会为每个修改行发送一条T-SQL命令,所以效率并不高。
而且再其他的方式中,都可以进行异步处理,SqlDataAdapter的Update()方法并不支持异步的结果,所以此方法不推荐
相关文章推荐
- .NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
- .NET批量大数据插入性能分析及比较(3.使用事务)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(3.使用事务)
- .NET批量大数据插入性能分析及比较(5.使用SqlBulkCopy)
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- .NET批量大数据插入性能分析及比较
- .NET批量大数据插入性能分析及比较
- .NET批量大数据插入性能分析及比较(2.普通插入与拼接sql批量插入)
- .NET批量大数据插入性能分析及比较(1.准备工作)
- .NET批量大数据插入性能分析及比较(1.准备工作)
- .NET批量大数据插入性能分析及比较(2.普通插入与拼接sql批量插入)
- NET批量大数据插入性能分析及比较
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- Java使用Arrays、ArrayList、LinkedList、Vector实现插入查询性能分析
- MySQL大量数据插入各种方法性能分析与比较
- Android性能分析工具Systrace的使用
- Android性能分析工具Systrace和TraceView的使用