2

perl で何らかの機能を実行するのに必要な時間を測定したいと考えています。使っTime::HiResたけど時間が読めない。どうすれば簡単に達成できますか?

コードは次のとおりです。

use Time::HiRes qw (time);
my $start = time;
my_function_here ();
my $time = time - $start;
printf "Time needed for my_function_here is: $time sec\n";

sub my_function_here {
    my $null = 1;
}
4

3 に答える 3

6

この種のタスクにはBenchmarkコア Perl モジュールを使用します。

use strict;
use warnings;
use Benchmark qw/:hireswallclock/;

my $td = timeit(1, 'my_function_here');

print "the code took: ",timestr($td),"\n";
#<-- the code took: 2.86102e-006 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)

sub my_function_here {
    my $null = 1;
    #...
}
于 2013-08-07T06:18:37.517 に答える
1

このように読めない7.86781311035156e-06というのは、関数が速すぎるため、数値が通常のフロートのように単純ではないためです。関数の前にループを使用して、数値を人間が読みやすくすることをお勧めします。

use Time::HiRes qw (time);
my $start = time;
foreach ( 1 ... 1000000 ){
    my_function_here ();
}
my $time = time - $start;
print "Time needed for my_function_here is: $time sec\n";

sub my_function_here {
    my $null = 1;
}

あなたのコードはprintfあるべき場所にありますprint

于 2013-08-07T05:52:47.200 に答える
0

より複雑なケースがあり、perl スクリプトをプロファイリングして最も時間が費やされている場所を確認したい場合は、素晴らしい Devel::NYTProf を調べる必要があります (たとえば、http ://augustinalareina.wordpress.com/2011/02 を参照)。 /05/getting-started-with-develnytprof/ )。関数が呼び出される頻度、平均的な呼び出しとすべてを合わせた時間などがわかります...

このようにして、どこで時間を失っているかを実際に確認し、最適化が実際に意味のある部分に集中し、行った改善 (またはその逆) を測定することもできます。

これがお役に立てば幸いです、クリスチャン

于 2013-08-07T08:39:07.663 に答える