プログラムの実行速度を測る on Windows

いろいろやってる中でアプリの処理速度を測る必要がでてきた.しかし,Windows には Linux の time コマンドみたいなのがないのでちょっと作ってみた.単に Windows 上でコンソールで動くプログラムの実行速度を測るだけ.出てきた数字を 20 で割ると,平均の実行速度が得られる.ただしやってみるとわかるとおり,実行するたびにかなり幅のある値がでる.繰り返し数を100とか増やすとばらつきがへる.Window を開くプログラムを実行させるとなかなか大変なことになると想像されるので,その点は注意のこと.

作成にあたっては以下を参考にしている.

#include <stdio.h>
#include <windows.h>
#include <mmsystem.h> 
#include <process.h>

int main( int argc, char* argv[] )
{
	DWORD a, b, diff;
	int i;
	printf( "%s\n", argv[1] );
	
	a = timeGetTime();

	for ( i = 0; i < 20; i++ ){
		system(argv[1]);
	}

	b = timeGetTime();
	diff = a - b;
	printf( "proctime = %d\n", diff );
	return 0;
}

コンパイルするときは,winmm.lib をリンクする必要がある.こんなかんじで.

> cl.exe code.c /link winmm.lib

コマンドラインから,引数として実行するコマンドを指定してやる.エラー処理とかしてないので,引数を指定しないとエラーというウィンドウが開く.system 関数を使っているので精度はよくない.でも,そもそも Windows 上でプログラムを実行させると前述のとおりばらつきが出まくるから,この誤差自体はそれほど問題にならないはず(多分).