プロファイラで見てわかりやすかったところを対応しました。
www.nuget.org
こっから先は難しいですね。
で、もう少しノイズを減らすためにDBをSQLサーバーからSQLiteに変えました。ファイルアクセスなんで余計なブレはすくないでしょう。ちなみに計測はSurfacePro4のCorei5でやってます。
SQLiteはDBアプリとか必要なくて、Nugetから落としてくるだけで使えます。
あれ?EF入るの?
EFないバージョンと分けてくれればいいのに。
SQLiteは方言対応とかあるのですが、まあ、今回の計測程度は使えます。で、計測。SQLは一件だけ取得するものです。
SELECT IntVal, FloatVal, DoubleVal, DecimalVal, StringVal FROM TableValues WHERE ((TableValues.IntVal) = (@p_0));
(msec) | Lambdic | Dapper | |
---|---|---|---|
1 | 0.5243 | 0.2986 | |
2 | 0.1682 | 0.0964 | |
3 | 0.137 | 0.0824 | |
4 | 0.1407 | 0.0779 | |
5 | 0.1341 | 0.0734 | |
6 | 0.1226 | 0.0746 | |
7 | 0.1234 | 0.0717 | |
.. | .. | .. | |
.. | .. | .. | |
500 | 0.1001 | 0.0648 | |
平均 | 0.13300521 | 0.075227455 | ←差 0.057777756 |
速えー!
500回の平均で57µまで詰めました!
(でも、Dapperの1.76倍かかっているのか・・・)
このケースでは実使用上は問題ないレベルなんじゃないかなー。
まあ、ボトルネックはクエリ作成だから、もう少し色んなパターンで計測しないとダメでしょうけど。
ていうか、SQLite対応先にやろう。