実行時間計測 (timing)

実行時間を計測する。

C言語

#include <stdio.h>
#include <sys/time.h> // gettimeofday
...
struct timeval t0, t1;

gettimeofday(&t0, NULL);
// ここに、計測対象処理
gettimeofday(&t1, NULL);

t1.tv_sec -= t0.tv_sec;
if (t1.tv_usec < t0.tv_usec) {
	t1.tv_sec -= 1;
	t1.tv_usec += 1000000 - t0.tv_usec;
} else {
	t1.tv_usec -= t0.tv_usec;
}
printf("%d.%06d sec\n", t1.tv_sec, t1.tv_usec);

上の例は経過時間を計測する。

プロセスが消費した時間は clock で、システムやサブプロセスでの消費を別にする場合は times で計測できる。

#include <stdio.h>
#include <time.h>      // clock
#include <sys/times.h> // times
...
clock_t tc0, tc1;      // clock 用
clock_t tt0, tt1;      // times 用
struct tms tms0, tms1; // times 用

tc0 = clock();
tt0 = times(&tms0);
// ここに、計測対象処理
tc1 = clock();
tt1 = times(&tms1);

// clock
// このプロセスでの消費時間。システム時間を含む。
// サブプロセスや sleep 時間は含まない。
printf("%f sec\n",((double)tc1 - tc0)/CLOCKS_PER_SEC);

// times
// サブプロセスやシステム時間、sleep などすべてを含む時間。
printf("%f sec\n",((double)tt1 - tt0)/sysconf(_SC_CLK_TCK));

// times で得られる詳細情報。
//   u  = このプロセスのユーザー時間。
//   s  = このプロセスのシステム時間。
//   cu = サブプロセスのユーザー時間。
//   cs = サブプロセスのシステム時間。
// スレッドは、そのプロセスに含まれる。
// サブプロセスのサブプロセスは、サブプロセスに含まれる。
// sleep 時間はどこにも含まれない。

// u
printf("%f sec\n",((double)tms1.tms_utime - tms0.tms_utime)/sysconf(_SC_CLK_TCK));
// s
printf("%f sec\n",((double)tms1.tms_stime - tms0.tms_stime)/sysconf(_SC_CLK_TCK));
// cu
printf("%f sec\n",((double)tms1.tms_cutime - tms0.tms_cutime)/sysconf(_SC_CLK_TCK));
// cs
printf("%f sec\n",((double)tms1.tms_cstime - tms0.tms_cstime)/sysconf(_SC_CLK_TCK));

メニューに戻る

Java

long t0 = System.currentTimeMillis();
// ここに、計測対象処理
long t1 = System.currentTimeMillis();
System.out.println(t1 - t0);

メニューに戻る

Ruby

t0 = Time.now
# ここに、計測対象処理
t1 = Time.now

puts "#{t1 - t0} sec"

上の例は経過時間を計測する。

プロセスの消費時間は Process.times で計測できる。

t0 = Process.times
# ここに、計測対象処理
t1 = Process.times

#   u  = このプロセスのユーザー時間。
#   s  = このプロセスのシステム時間。
#   cu = サブプロセスのユーザー時間。
#   cs = サブプロセスのシステム時間。
# スレッドは、そのプロセスに含まれる。
# サブプロセスのサブプロセスは、サブプロセスに含まれる。
# sleep 時間はどこにも含まれない。

# u
puts "#{t1.utime - t0.utime} sec"
# s
puts "#{t1.stime - t0.stime} sec"
# cu
puts "#{t1.cutime - t0.cutime} sec"
# cs
puts "#{t1.cstime - t0.cstime} sec"

メニューに戻る

Shell

$ time 計測対象コマンド

メニューに戻る