あるテキストファイルを処理するプログラムがあるのだけど、ファイルサイズが大きくなるとものすごく処理が遅くなるという、ちょっと困った現象が起こっていました。
ファイルサイズが4倍、16倍となれば、処理時間も4倍、16倍となるはずです。しかしこのプログラムは6倍、193倍とリニアな伸び方ではなく、乗数的な伸び方をしているのです。システムダウンはもう目の前です。(笑)
そこで、プログラムをミリ秒単位で計測するデバッグルーチンを入れてみたところ、意外な原因がわかりました。その原因とは、なんと、
$lines = split(“\n”,$textdata);
おなじみ、split()関数でした。
テキストデータの改行を区切りとして、配列に1行ずつ格納したかったんです。しかもこのプログラムを見ておわかりですね?explode()使えよって感じです。(笑)
正しい使い方
$lines = explode(“\n”,$textdata);
split() を explode() にしたところ、94,861ms かかっていた処理が 26ms で終わりました。split()遅すぎ~!!