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 |
グラフにして比較してみるとこんな感じ。
1000行では1.5倍弱、10000行だと3倍以上遅くなりました。
私が今やってるプロジェクトでは分割して取得するから、1度の通信で扱うデータの量は1000行程度だけど、それでも1.5倍近く遅くなるのか。