2

我的项目中有一个方法可以使用 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 更新问题,所以我正在寻找尽可能优化它的方法。

4

1 回答 1

0

如果您的 updatebatchsize 比一次更大,那么必须通过网络传输大量数据,因此非常大的 UpdateBatchSize 并没有太大区别。相比之下,较小的尺寸会表现得更好。

于 2013-03-19T14:50:32.867 回答