myするタイミング。
昨晩やってみたかった実験、
レキシカル変数を
宣言するタイミング(場所)次第で
速度にどれくらい変化があるか、調べてみた。
main
#/usr/bin/perl -w
use Time::HiRes;
my $checkTimes = $ARGV[1] =~ /^[0-9]+$/ ? $ARGV[1] : 100;
my $timecheck = Time::HiRes::time;
実験するパターン
print Time::HiRes::time - $timecheck."\n";
exit;
パターン1
my ($allData, $tmpData);for (1..$checkTimes) {
$tmpData = "test";
$tmpData =~ s/t/T/g;
$allData .= $tmpData;
};
パターン2
my $allData = "";for (1..$checkTimes) {
my $tmpData = "test";
$tmpData =~ s/t/T/g;
$allData .= $tmpData;
}
これを$checkTimesを10000000000にして
交互に呼び出すのを10回やって平均値を出したら…
■パターン1
0.000305295
■パターン2
0.000322843
…結果、総合するとパターン1のが、
0.0000175476 速かったのでした。
レキシカル変数の有効範囲が狭い方がいいのか、
範囲は広いが、何度も変数を生成しなくて済む方がいいのか、
後者が速いだろうなぁ…と思いつつも、
メモリが解放されるタイミングとか想像すると
前者も場合によっては良いのかも?とか思って、結構迷う事がありましたが。
$tmpData に突っ込む値を、もっと大きくしても
同じ結果でした。