2011-08-18 6 views

答えて

9

Dapperのは、記憶されprocsのためのバッチ処理コマンドをサポート:上記

connection.Execute("create table #t (i int)"); 
connection.Execute("create proC#spInsert @i int as insert #t values (@i)"); 
connection.Execute("#spInsert", new[] { new { i = 1 }, new {i = 2}, new {i = 3} }, 
    commandType: CommandType.StoredProcedure); 

var nums = connection.Query<int>("select * from #t order by i").ToList(); 

nums[0].IsEqualTo(1); 
nums[1].IsEqualTo(2); 
nums[2].IsEqualTo(3); 

コードがテキスト#spInsert、3回のIDbCommandを再利用します。これにより、バッチインサートがより効率的になります。

一般に、このレベルのperfについて心配すると、トランザクションでバッチコールがラップされます。あなたはそれを送信することを決定するものは何でもバッチ

さらにDapperのサポート:

connection.Execute(@" 
    exeC#spInsert @i = @one 
    exeC#spInsert @i = @two 
    exeC#spInsert @i = @three", 
    new { one = 1, two = 2, three = 3 }); 

3行が挿入されることになります。

さらに、#spInsertが結果セットを返した場合は、QueryMultipleを使用して、繰り返し実行する3つのレコードセットを与えるバッチを実行できます。

+1

個別の実行ではなく、19個のプロシージャ呼び出しを1つのバッチとして送信すると、パフォーマンスが3倍に向上します(141秒対421秒)。リストからクエリと@param_iの名前を準備するためにStringBuilderを使用しました。ここでiはインデックスです。 –

関連する問題