我的项目中有一个方法可以使用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/

10-12 02:28