my $start_time = [Time::HiRes::gettimeofday()];
my $diff = Time::HiRes::tv_interval($start_time);
print "\n\n$diff\n";
おそらく。 「より良い」という意味に依存します。
機能性の観点から「より良い」解決策を求めている場合、これでほぼ間違いありません。
「より扱いにくい」表記の意味で「より良い」を求めている場合、スカラーコンテキストでは、Time::HiRes::gettimeofday()
は、エポック以降の浮動秒を返します(小数部はマイクロ秒を表します) Time::HiRes::time()
(標準のtime()
関数の適切なドロップイン置換です) )
my $start = Time::HiRes::gettimeofday();
...
my $end = Time::HiRes::gettimeofday();
printf("%.2f\n", $end - $start);
または:
use Time::HiRes qw( time );
my $start = time();
...
my $end = time();
printf("%.2f\n", $end - $start);
何をしているのかに依存します。壁時計の時間(経過した実際の時間)を測定したい場合、これ以上改善することはできません。コンピュータが何かを実行している時間を測定する場合は、 times
関数または time
を調べてください。コマンド。 Perlのtimes
関数は、コード内のこのプロセスの現在の累積時間と使用しているモジュールのコード、システムコール内のこのプロセス、ユーザーコード内のこのプロセスのすべての子のリストを返します。システムコール内のこのプロセスのすべての子。
#!/usr/bin/Perl
use strict;
use warnings;
use Time::HiRes;
my $start_time = [Time::HiRes::gettimeofday()];
.
.
.
my ($user, $system, $child_user, $child_system) = times;
print "wall clock time was ", Time::HiRes::tv_interval($start_time), "\n",
"user time for $$ was $user\n",
"system time for $$ was $system\n",
"user time for all children was $child_user\n",
"system time for all children was $child_system\n";
UNIXのtime
コマンドは機能が似ています。このようなコマンドを実行します
time ./script.pl
そして、それはこのようなものを出力します
real 0m0.692s
user 0m0.019s
sys 0m0.109s
ここで、realは実時間であり、userとsysは上記のユーザーとシステムと同じです。
time
コマンドは人間にとって使いやすいですが、times
関数はより多くの情報を提供し、コンピュータープログラムへの適合が容易です(さらに、プログラムの実行中に結果を生成するという利点もあります)まだ実行中です)。
ああ、私は$^T
。この変数は、プログラムの開始時刻をエポックからの秒数で保持します。したがって、秒単位の細かさだけを気にする場合は、
END { print "The program ran for ", time() - $^T, " seconds\n" }
プログラムの上部近く。
それはほとんどそれです-それはあなたに高解像度の経過時間を与えます。もちろん、誰かがシステムクロックを台無しにしない限り。
これは、1秒の粒度のインサービスタイミングに役立ちます。
はじめに...
$debugtimer = time;
$debugstr = "";
...どこでも好きな場所で...
kerchunk("message") # message is short description of location in code
...プログラムの終了...
print "timings: $debugstr";
...そしてあなたの潜水艦で:
sub kerchunk
{
my ($msg) = shift;
my $pertock = time;
my $kch = abs($debugtimer - $pertock);
$debugstr .= "Elapsed at $msg: $kch<br>\n";
}