WCF と DataSet の相性は×

WCF で DataSet を使うと速度が遅くなるらしい。

(ネタに困っていたので)自分でも次の条件下で検証してみました。

  • Virtual PC を使用
  • TCP で通信
  • DataSet の RemotingFormat は Binary
  • 列数は 100 で固定
  • 列の型はすべて int

.NET Remoting の結果は下表の通り(単位はミリ秒)。

行数 1回目 2回目 3回目 4回目 5回目 平均
100行 130 153 140 133 130 137.2
1000行 224 204 220 204 292 228.8
10000行 1024 936 1000 899 903 952.4

WCF の結果は下表の通り(単位はミリ秒)。

行数 1回目 2回目 3回目 4回目 5回目 平均
100行 42 45 41 45 57 46.2
1000行 348 370 331 337 340 345.2
10000行 3316 3260 3382 3411 3727 3328.2

グラフにして比較してみるとこんな感じ。
f:id:griefworker:20080902110237j:image

1000行では1.5倍弱、10000行だと3倍以上遅くなりました。

私が今やってるプロジェクトでは分割して取得するから、1度の通信で扱うデータの量は1000行程度だけど、それでも1.5倍近く遅くなるのか。