首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态计算ADO.NET DataAdapter的最优UpdateBatchSizefor

如何动态计算ADO.NET DataAdapter的最优UpdateBatchSizefor
EN

Stack Overflow用户
提问于 2013-03-19 22:47:25
回答 1查看 358关注 0票数 2

我的项目中有一个使用ADO.NET DataAdapter更新SQL表的方法。

现在,这些表中的一些可能非常大,可能有5000行,而另一些只包含几行数据。我希望能够做的是根据DataTable的大小自动计算每个表的最佳UpdateBatchSize。

到目前为止,我采取的方法是使用以下扩展方法:

代码语言:javascript
复制
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;
     }
 }

这确实有效,但我似乎在较小的表上获得了性能影响。

为了完整起见,下面是我如何在适配器上设置大小:

代码语言:javascript
复制
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更新的问题,所以我正在寻找尽可能优化这一点的方法。

EN

回答 1

Stack Overflow用户

发布于 2013-03-19 22:50:33

如果你有更多更大的updatebatchsize,那么那么多的数据必须通过网络传输,所以非常大的UpdateBatchSize不会有太大的不同。相比之下,较小的大小会表现得更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15502657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档