こんにちは、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ランキング
-
データベースから取得したデー...
-
grep関数を用いた複数行からの抽出
-
配列に入った変数を二度使いたい
-
正規表現 perl 連続ヒットの...
-
画面を強制的に再描画させる方法
-
ハッシュ検索はなぜ速い
-
VBのReturnの使い方
-
ハッシュのハッシュを実現したい。
-
リストボックスに縦スクロール...
-
乱数の桁数指定、または範囲指定。
-
Can't use string ("0") as an ...
-
GIFアニメをループさせたくない
-
文字列を変数名として扱う方法
-
アクティブセルから、A列最終行...
-
VB6の公式リファレンスはありま...
-
まったく同じファイルのハッシ...
-
エクセルの当番表を作っていま...
-
ループフリー
-
イベントの発生を待つ
-
Javaでゲーム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
DBIを使ってのデータの取り出し...
-
python質問
-
perlでファイルの拡張子を除い...
-
grep関数を用いた複数行からの抽出
-
アルファベットn文字の組み合わ...
-
半角文字の縦書き表示
-
乱数と順列と組み合わせ
-
配列やハッシュで中身が同じか...
-
桁数指定と四捨五入
-
ループ中でのmy宣言と処理速度
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
おすすめ情報