極悪です。
閑舎 さんの [TSperl:188] Re: txtsearchver.0.63が異様に遅い……。 から
>> open(IN, "$FILE") or die;
>> binmode(IN);
>> $LINE = $buff = "";
>> while (read(IN, $buff, 8192)) {
>> $LINE .= $buff;
>> }
>> read(IN, $LINE, 99999999);
>> close(IN);
>>
>> に代えると、さっと終るようです(ノートでなく、VMware 上の WinXP での確
>> 認)。
>
>度々すみません。おわかりでしょうが、上のコードで
>
> read(IN, $LINE, 99999999);
>
>の 1 行は削除してお読みください。カットアンドペーストの消し忘れです(^^;。
了解。
それにしても read で読むバイト数の最適値ってどうやって決まる
のでしょう。ハードディスクのクラスタとかセクタサイズがからん
でそうな気はしますが。
8192byte だと一気読みしたのと同じくらいのパフォーマンス、
99999999byte だと 1.5〜2 倍近く速い。1byte とかやると当然、
話にならないくらい時間がかかる。
--^hoge.pl
my $file = shift or die;
my $size = shift;
my $buff;
open(FILE,$file) or die $!;
binmode FILE;
if($size){
while(read(FILE,$_,$size)){
$buff .= $_;
}
}else{
$/ = "";
$buff = <FILE>;
}
close FILE;
print int((length $buff)/1024/1024),"MB\n";
print time - $^T,"s\n";
--$
以下テキトーに試してます。
D:%perl hoge.pl D:\PDF\00legend.txt
175MB
46s
D:%perl hoge.pl D:\PDF\00legend.txt
175MB
42s
D:%perl hoge.pl D:\PDF\00legend.txt 8192
175MB
43s
D:%perl hoge.pl D:\PDF\00legend.txt 8192
175MB
45s
D:%perl hoge.pl D:\PDF\00legend.txt
175MB
45s
D:%perl hoge.pl D:\PDF\00legend.txt 8192
175MB
41s
D:%perl hoge.pl D:\PDF\00legend.txt 99999999
175MB
33s
D:%perl hoge.pl D:\PDF\00legend.txt 99999999
175MB
21s
D:%perl hoge.pl D:\PDF\00legend.txt 99999999
175MB
21s
D:%perl hoge.pl D:\PDF\00legend.txt
175MB
41s
D:%
# あぁ、ハードディスクがゴリゴリ鳴る…
--
FZH01112@..., http://homepage1.nifty.com/dune/