プログラムやバッチファイルの実行速度を計測しよう[%date% %time%]

ストップウォッチを構えている妹
妹「ううん」
兄「どうした?」
妹「バッチファイルを作ったんだけど、どのくらいで処理が終わったのか時間を入れたいんだけど」
兄「それでストップウォッチを抱えているのか……?」
妹「うん。大体、三分くらいで終わるんだけど、ってああ!終わってるじゃない!お兄ちゃんのバカ!」
兄「いやいや、なんで手動で測ってるんだよ」

コンソール処理やバッチ処理を行う際に、実行ファイルがある場合に、プログラムの速度が気になる事があります。
ほとんどのプログラム製作者が処理時間を測るために入れた事があると思います。

//— 計測したいProgram —

#include “stdio.h”

int main()
{
Sleep(1024);
return 0;
}
兄「これをTCCでコンパイルしてみて」
妹「どういうソースコードなの?」
兄「1024ミリ秒休んで何もせず終了するプログラムだよ」
妹「1024ミリ秒って?」
兄「ミリ秒(ms)は、1000分の1秒だよ。1000で1秒」
妹「つまりこれは1.024秒処理にかかるプログラムだね」

Testpgm.exeっていうプログラムで実行ファイルを作成する妹。

兄「じゃあ次はコマンドプロンプトだね」

echo off
echo “Start testpgm.exe |%date% %time%|”
call Testpgm.exe
echo “Finish testpgm.exe |%date% %time%|”

妹「これは?」
兄「環境変数を使って日付と時間を取得しているんだ。さあ、実行してみよう」

妹「09:10:35.30から09:10:36.38になったね」
兄「1.024秒だから36.324になって欲しいけど、プログラムの呼び出しコストもあるし、外部からだからね」
妹「内部からだと、もっと精度はよくなるの?」
兄「C/C++のパフォーマンスカウンタやマルチメディアタイマーを使えば1ミリ秒以下の精度でできるよ。CPU負荷は上がるけどね」
妹「通常だとどの程度になるの?」
兄「TickCountをCでとって16ミリ秒くらいの誤差だね。ゲームとか入れてると1ミリ以下の精度で動いてる場合もあるから一概には言えないけど」
妹「ふうん。まあストップウォッチや時計使うよりは、%date% %time%使う方がよさそうだね」
兄「Time /Tも確認したけど、同じくらいになるし結合を入れると面倒だから環境変数を使うのがおすすめだよ」