Perlでループ処理実行時のメモリ不足について
Perlでループ処理実行時のメモリ不足について
大きなサイズのファイルを1行目から順番に読んでいく処理をするプログラムが、途中で強制終了
原因はデータの読み込みにwhileじゃなくてforeachを使っていたから
Perlベストプラクティスにも書いてあった
最悪なのは、forループのスケーラビリティが充分ではないことだ。
...(略)...
このことは、入力がある程度の大きさに達すると、メモリ割り当てのエラー(Out of memory!)によって入力ループが終了したり、あるいは過剰な
メモリ割り当てやスワッピングのオーバーヘッドによって、少なくとも、処理速度が話にならないほど低下するおそれがあることを意味する。
これに対し、同等のwhileループは、データを1行ずつ読み取ながら処理する。
foreach my $line(<FILE>){ }
じゃなくて
while(my $line = <FILE>){ }
みたいに書きなさいよってこと