frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

リファレンスを使うと。

何故か私はハッシュを

そのまま使うのが、あまり好きではなくて、

無名ハッシュのリファレンスを使いたがるのだけど

それって、処理速度的にどうなのかな?

と、まぁ、たて続けに

レベルの低い簡単なテストをしてみる(笑)

main

#/usr/bin/perl -w

use 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のが速い。

うーん、そっかー。