![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは、Perl入門者ですがよろしくお願いします。
質問内容はループ中にmy宣言をいちいちすると処理速度は落ちてしまうのかということです。
ソースを例に挙げると
まず、$lenをループの外に書く方法と
my $i;
my $len;
for( $i=0 ; $i<1024 ; $i++){
$len = length($str[$i];
}
$lenをループの中に書く方法
my $i;
for($i=0 ; $i<1024 ; $i++){
my $len;
$len = length($str[$i]);
}
の2種類です(その他の変数については特に言及していません)
使いやすさでいえば、ループ内で宣言をした方が自動的に初期化されるのでうれしいのですが
ふと、いちいちメモリの解放と確保を行っているわけですからOS(?)に負荷がかかって遅くなっているのではと考えました。
Perlで処理速度を測ることもできるようですが恥ずかしいながらスキル不足です。すいません。
どなたかご存知の方、自分なりの考えがある方はご教授頂きたく存じます。
よろしくお願いします。
No.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;
返事が遅くなって申し訳ありません!!
回答はすぐに読ませていただきました。
非常に参考になりました。少しプログラミングの難易度は上がりますがこのあたりを気にしたプログラミングを行っていこうと思うことができました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- 英語 a lot of my homeworkはありか? 5 2022/10/13 16:50
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
[Perl]長すぎるif文を簡単にしたい
-
桁数指定と四捨五入
-
アルファベットn文字の組み合わ...
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
テキストボックスの名前に変数...
-
UWSCに制限時間を付けたいです
-
再帰関数のインライン展開
-
範囲指定したセルを1つずつ飛...
-
vb.netです。2次元配列の要素を...
-
Excel vba でコンボボックスの...
-
クラスに配列を渡す方法
-
VBA Boxが空白の場合のメッセー...
-
DoEventsが必要な理由について
-
VBAで3秒だけ時間を止めたい
-
エクセル関数で1〜12の数字がル...
-
VBAのautofilter、criteriaの配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
perlでファイルの拡張子を除い...
-
python質問
-
QNo.3258883データベースから取...
-
組み合わせを作るアルゴリズム
-
非共通要素を抜き出す
-
アルファベットn文字の組み合わ...
-
grep関数を用いた複数行からの抽出
-
複数の配列の要素を繰り返し処...
-
桁数指定と四捨五入
-
ハッシュのハッシュの値代入で...
-
サブルーチンへ渡した配列のリ...
-
index関数で複数個抜き出す
-
二次元配列のつかいかた。
-
正規表現 perl 連続ヒットの...
-
配列に入った変数を二度使いたい
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
おすすめ情報