前回までのあらすじ
Dapperにてユーザー定義テーブル型をストアドプロシージャのパラメータとして利用する方法を検討した。
今回はそれらの速度比較をします。
速度比較
前回記事中の二つの拡張メソッド、
// Original版 var tvp = items.AsTableValuedParameter("tvpTodoItems", new[] { nameof(CreateTodoItemPoco.TodoName), nameof(CreateTodoItemPoco.TodoIsDone) });
と
// 自作版
var tvp =
items.AsStructuredListTableValuedParameter(
TvpTodoItems.TypeFullName,
TvpTodoItems.OrderedColumns,
TvpTodoItems.Map);
のそれぞれにかかる時間を、itemsのサイズ(row_size)毎に計算します。
結果は以下の通りです。時間は全てマイクロ病(10^-6秒)で、それぞれ実行回数3000回の平均です。
row_size | Original版(microsec) | 自作版(microsec) |
---|---|---|
1 | 6.61 | 2.97 |
5 | 12.06 | 4.82 |
10 | 19.25 | 6.69 |
50 | 80.01 | 29.44 |
100 | 159.74 | 59.31 |
1000 | 1699.96 | 662.22 |
自作版の方が概ね倍くらい速いようですね。
SQL実行にかかる時間に比べれば無視できる時間かと思われます。