Dapperにて、TVP(テーブル値パラメーター)を扱う(速度比較)

前回までのあらすじ

Dapperにてユーザー定義テーブル型をストアドプロシージャのパラメータとして利用する方法を検討した。

mrgchr.hatenablog.com

今回はそれらの速度比較をします。

速度比較

前回記事中の二つの拡張メソッド、

// 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実行にかかる時間に比べれば無視できる時間かと思われます。