如何动态计算ADO的最佳updatebatchsize.净DataAdapter

本文关键字:最佳 updatebatchsize DataAdapter ADO 计算 何动态 动态 | 更新日期: 2023-09-27 18:04:36

我有一个方法在我的项目,使用ADO更新我的SQL表。净DataAdapter。

现在,其中一些表可能非常大,可能有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更新问题,所以我正在寻找尽可能优化这一点的方法。

如何动态计算ADO的最佳updatebatchsize.净DataAdapter

如果你有更大的updatebatchsize,那么很多数据必须通过网络传输,所以非常大的updatebatchsize不会产生太大的差异。