dune <FZH01112@...> さん wrote.
> }else{
> $/ = "";
> $buff = <FILE>;
> }
ここは undef $/; ですね。うちの Linux 環境だと、
$ perl hoge.pl 000text
128MB
11s
$ perl hoge.pl 000text
128MB
8s
$ perl hoge.pl 000text 8192
128MB
8s
$ perl hoge.pl 000text 8192
128MB
9s
$ perl hoge.pl 000text 4096
128MB
6s
$ perl hoge.pl 000text 4096
128MB
6s
$ perl hoge.pl 000text
128MB
6s
$ perl hoge.pl 000text
128MB
5s
$ perl hoge.pl 000text 99999999
128MB
15s
$ perl hoge.pl 000text 99999999
128MB
20s
$ perl hoge.pl 000text 8192
128MB
10s
$ perl hoge.pl 000text 4096
128MB
7s
$ perl hoge.pl 000text 8192
128MB
6s
$ perl hoge.pl 000text 4096
128MB
7s
のようになりました。while read での バッファサイズ 99999999 はかなり効率
が悪いです。txtsearch は 99999999 までを限度に 1 度だけ read するという
使い方をしたので、自分がテストした時はこの辺の効率の悪さが表に出なかった
ようです。ちなみに while でなく 128MB をバッファサイズとして 1 度だけ
read すると次のようです。
$ perl hoge2.pl 000text
128MB
5s
OS の違いによって read の実装も違うような感じだし、ここから先はソース
を見ないとわからんですね。
クラスタサイズないし、Inode Density が 4096 が標準だから 4096 ないし
8192 程度で read し、while で回すのがやはり無難なのかな?
--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/