C#::プロファイリング!
ン十万する上位エディションのVisualStudioにはプロファイラというのがついていて、実行するだけで関数ごとの実行時間統計とか取れたりするんですけど、個人が趣味で使うExpressEditionにそんな機能ついているはずもなく、時間計測用関数を自作することになるわけです。
私の場合は、時間制約がシビアそうなプログラム(てゆーかぶっちゃけゲーム)では、次のようなクラスを使って計測します。まぁよく見るやつですね。
public static class Profiler{ public static long Profile(this Action a, int count){ System.Diagnostics.Stopwatch stw = new System.Diagnostics.Stopwatch(); stw.Start(); for (int i = 0; i < count; i++) a(); stw.Stop(); return stw.ElapsedMilliseconds; } }
実際に計測するときは、たとえば
const int loop = 10000; Console.WriteLine(Profiler.Profile(() => { //ここに計測したい処理を書く }, loop));
こんな風にやったりとか。C#3.0から拡張メソッドが使えるようになっているので、
static class Program{ void Main(){ const int loop = 1000; Console.WriteLine(((Action)testProc).Profile(loop)); } void testProc(){ //ここに計測したい処理を書く } }
こんな風にしてみたりとか。
速度関連の話が続いたので、参考までに。ちなみに、最初に空関数の処理速度を計測しておくと、計測用関数の呼び出しを無視した純粋な処理時間に近い値を求められますよ。