我的项目中有一个方法,它使用ADO.NET DataAdapter更新我的SQL表。
现在,这些表中的一些可能非常大,可能有5000行,而某些表只有几行数据。我希望能够根据DataTable的大小自动计算每个表的最佳UpdateBatchSize。
我到目前为止采用的方法是使用以下扩展方法:
public static void SetBatchUpdateSize(this DbDataAdapter adapter, int rowCount)
{
if (rowCount <= 5)
{
adapter.UpdateBatchSize = 5;
}
else if (rowCount <= 1000)
{
adapter.UpdateBatchSize = rowCount/2;
}
else
{
adapter.UpdateBatchSize = 500;
}
}
这确实有效,但我似乎在较小的表上受到了性能影响。
为了完整性,这里是我如何在适配器上设置大小:
var db = dbAccessLayer.CreateConnection();
try
{
adapter.SelectCommand.Connection = db;
adapter.SelectCommand.Connection.Open();
adapter.SelectCommand.Transaction = transaction;
SetTimeout(timeout);
adapter.SetBatchUpdateSize(dataTable.Rows.Count);
int result = adapter.Update(Table);
adapter.SelectCommand.Transaction = null;
return result;
}
catch (Exception)
{
dataTable.RejectChanges();
throw;
}
似乎有很多关于更新批次的性能优势的猜测,但没有关于最佳关系的具体事实。我发现我在低速和低质量连接上遇到SQL更新问题所以我正在寻找尽可能优化这种方法的方法。
答案 0 :(得分:0)
如果你有更大的updatebatchsize而不是一次性那么多的数据必须通过网络传输,所以非常大的UpdateBatchSize并没有太大的区别。相比之下,较小的尺寸会表现得更好。