my $start_time = [Time::HiRes::gettimeofday()];
my $diff = Time::HiRes::tv_interval($start_time);
print "\n\n$diff\n";
答えて
おそらく。あなたが「より良い」という意味に依存します。
の機能については、より良いソリューションをお探しの場合は、、これはかなりです。
あなたはスカラーコンテキストでは、Time::HiRes::gettimeofday()
だけで、(マイクロ秒を表す小数部分で)エポックからの浮動秒を返します、ということを知った後、「より良い」のために「あまりぎこちない」表記の意味でのを求めている場合(標準time()
機能のための良好なドロップイン交換である。)のようなTime::HiRes::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
のようなコマンドを実行し、それが本当のウォールクロック時間とユーザーがいるとsysが上記のユーザーとシステムと同じであり、この
real 0m0.692s
user 0m0.019s
sys 0m0.109s
ようなものを出力します。
time
コマンドは人間が使用する方が簡単ですが、times
関数を使用すると、より多くの情報が得られ、コンピュータプログラムに組み込むのが容易になります(プログラムが実行されている間も結果が得られます)。
ああ、私は$^T
を言いました。この変数はエポックからの秒数でのプログラムの開始時刻を保持しているので、あなただけ秒の細かさを心配している場合、あなたは自分のプログラムの先頭近く
END { print "The program ran for ", time() - $^T, " seconds\n" }
を言うことができます。
これは、二番目の細かさで、サービスのタイミングのために有用である:
開始時...
$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";
}
- 1. 経過時間
どのような意味で良いですか? – ysth