リファレンスを使うと。
何故か私はハッシュを
そのまま使うのが、あまり好きではなくて、
無名ハッシュのリファレンスを使いたがるのだけど
それって、処理速度的にどうなのかな?
と、まぁ、たて続けに
レベルの低い簡単なテストをしてみる(笑)
main
#/usr/bin/perl -wuse Time::HiRes;
my $checkTimes = $ARGV[1] =~ /^[0-9]+$/ ? $ARGV[1] : 100;
my $timecheck = Time::HiRes::time;
my $allData = "";
実験パターン
print Time::HiRes::time - $timecheck."\n";
exit;
パターン1
my $hashData = {"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
"e" => 5
};
for (1..$checkTimes) {
$allData .= "$_ = $hashData->{$_}\n" foreach (keys %$hashData);
}
パターン2
my %hashData = ("a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
"e" => 5
);
for (1..$checkTimes) {
$allData .= "$_ = $hashData{$_}\n" foreach (keys %hashData);
}
これを$checkTimesを10000000にして
交互に呼び出すのを10回やって平均値を出したら…
■パターン1
0.001350951
■パターン2
0.001337004
…結果、パターン2のが、
0.0000139475 速かったのでした。
そっかー、リファレンス、予想外に遅くなるんだな。。。
keys のところで、%$ってやってるのが
時間くってるのかなぁ?とか思ったので…
パターン1
my $hashData = {"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
"e" => 5
};
for (1..$checkTimes) {
$allData .= "$hashData->{c}\n";
}
パターン2
my %hashData = ("a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
"e" => 5
);
for (1..$checkTimes) {
$allData .= "$hashData{c}\n";
}
…と修正して、実行してみたら…
■パターン1
0.000188088
■パターン2
0.000178409
…と、やっぱりパターン2のが速い。
うーん、そっかー。