- ベストアンサー
ループ中でのmy宣言と処理速度
- ループ中にmy宣言をいちいちすると処理速度は落ちてしまうのかを検証
- ループの外で変数を宣言する方法とループの中で変数を宣言する方法がある
- 変数をループの中で宣言する方が初期化が自動的に行われるが、メモリの解放と確保が繰り返される可能性がある
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんのコードで、とりあえずベンチマークを取ってみました。 質問者さんの予想通り、変数宣言をループの外(out of loop)でしたほうが、 ループの中(in loop)でするより1.5倍近く速いという結果になりました。 Benchmark: timing 10000 iterations of in loop, out of loop... .. in loop: 4 wallclock secs ( 3.69 usr + 0.00 sys = 3.69 CPU) @ 2711.50/s (n=10000) out of loop: 2 wallclock secs ( 2.48 usr + 0.00 sys = 2.48 CPU) @ 4025.76/s (n=10000) Rate in loop out of loop in loop . 2711/s. -- -33% out of loop 4026/s. 48% -- 私の環境は、以下です。 CPU:PentimuM 1.73MHz OS:Windows XP SP2 Perl:Active Perl 5.8.8 試したコードは以下です。 use Benchmark qw(:all); my @str = ('a'x10) x 1024; my $r = timethese( 10000, { 'out of loop' => sub { my $i; my $len; for( $i=0 ; $i<1024 ; $i++){ $len = length($str[$i]); } }, 'in loop' => sub { my $i; for($i=0 ; $i<1024 ; $i++){ my $len = length($str[$i]); } } }); cmpthese $r;
お礼
返事が遅くなって申し訳ありません!! 回答はすぐに読ませていただきました。 非常に参考になりました。少しプログラミングの難易度は上がりますがこのあたりを気にしたプログラミングを行っていこうと思うことができました。 ありがとうございました。