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 Updates に問題があることがわかったので、これを可能な限り最適化する方法を検討しています。

4

1 に答える 1

0

updatebatchsize が 1 回よりも大きい場合、大量のデータをネットワーク経由で転送する必要があるため、UpdateBatchSize が非常に大きくても大きな違いはありません。対照的に、サイズが小さいほどパフォーマンスが向上します。

于 2013-03-19T14:50:32.867 に答える