Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: perl -d:DProf (Re: HACKING-ja -> mknmz.in)
寺西です。
藤原 誠 / Makoto Fujiwara wrote:
>
> 実は最近 これを試していて、例えば
>
> %Time ExclSec CumulS #Calls sec/call Csec/c Name
> 71.2 63.98 63.928 2909 0.0220 0.0220 File::MMagic::checktype_data
> 7.48 6.717 16.190 2909 0.0023 0.0056 mknmz::put_field_index
> 5.90 5.298 4.212 67063 0.0001 0.0001 IO::File::open
...
> のように (File::MMagic が大勢を占る)のがとても気になって
> でも、もっとこまるのは、実は、この時に NMZ.p, NMZ.pi が出来て
> いないことなのです。
HTMLやメール等のファイルを大量に処理した場合には、
File::MMagic::checktype_data に時間がかかるようですね。
それで、少し見てみたところ、
foreach my $type (keys %{$self->{SPECIALS}}) {
my $token = '(' .
(join '|', sort {length($a) <=> length($b)}
@{$self->{SPECIALS}->{
$type}})
. ')';
my $tdata = $data;
if ($tdata =~ /$token/mg) {
$val{$type} = pos($tdata);
}
}
という部分があるのですが、これの $token を毎回作成しているのは
無駄ではないかと思います。たぶん、前処理でできると思うので、
少し(sort 分ぐらい)は速くなるのではないかと思います。
File::MMagic::new の最後に、前処理を入れれば良いでしょう。
なお、$self->{SPECIALS} は File::MMagic::addSpecials でも追加
されるので、ここでも $token の計算が必要になるでしょう。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E