RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

(C#)ベンチマークを簡単に計測する方法

作ったもの

 C#で処理速度を計測するためには、System.Diagnostics.Stopwatch を使います。ただ、これを毎回書くのは結構疲れてしまうので、簡単に計測できる関数を作りました。

前提

コード

/// <summary>
/// 1秒程度を消費して処理速度を測定する。
/// </summary>
/// <param name="rambda">引数なし、戻り値なしのラムダ関数</param>
/// <returns>1回あたり処理にかかったミリ秒</returns>
static double Benchmark(Action rambda) {
	var sw = new System.Diagnostics.Stopwatch();
	sw.Start();
	int i = 0, loop = 1;
	while (true) {
		rambda();
		++i;
		--loop;
		if(loop == 0) {
			if(sw.ElapsedMilliseconds > 500) {
				break;
			}
			loop = i;
		}
	}
	return (sw.ElapsedMilliseconds * 1.0 / i);
}

使い方

// 文字列の置き換え処理を1秒間繰り返して、1回あたり掛かった時間を表示します。
int ms = Benchmark(() => {
	"あいうえおかきくけこ".Replace("かきくけこ", "か行");
});
MessageBox.Show(ms + "[ms]");