我的项目中有一个方法可以使用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更新问题,因此我正在寻找尽可能优化此问题的方法。
最佳答案
如果您的updatebatchsize大于一次,则必须通过网络传输大量数据,因此,很大的UpdateBatchSize不会有太大的区别。相反,较小的尺寸将表现更好。
关于c# - 如何动态计算ADO.NET DataAdapter的最佳UpdateBatchSize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15502657/