[Namazu-devel-ja 773] Re: File::MMagic::checktype_data

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2005年 12月 15日 (木) 02:19:39 JST


寺西です。

Yukio USUDA wrote:
> 
> 選択パターン m/(aa|bb|cc|)/mg;

# 最後の '|' は余計?

> となっているところを
> m/aa/mg; m/bb/mg; m/cc/mg;
> と展開したところ
> File::MMagic::checktype_data が10倍ぐらい速くなりました。

ん?
m/(aa|bb|cc)/mg; を展開したら速いって読み取れますが、実際には
呼び出し回数の多い checktype_data の中で、
(aa|bb|cc)を作るための sort を毎回実行しているから遅いって
ことではないのでしょうか?

試しにパターンが未定義ならsortでパターンを作って、定義済みなら
それを使うといったものに変えて測定してみてはどうでしょう。
それで速いようなら、addSpecials 時にsortしてパターンを更新するという
のを追加すれば良いでしょう。
 
> (SPECIALSのパターンに最後にマッチした部分がファイル先頭に近い
> 部分のものを採用するという判定部分について良くわからなかったので
> 下記パッチでsは、パターンにマッチした回数が多いものを採用する
> というように変えてみました)

確かに、この判定ルールはいまいちわかりませんね。

そもそも、判定する順番が機械的に決められるのはいろいろ不都合が
あります。
というのも、優先的に先に判定しなければならないものというのが
あるためです。(判定ルールの弱い macbinary は優先度を落とすとか)

また、階層的にまず大分類の判定を行い、更に小分類を判定すると
いった処理を行うのが都合の良い場合もありますね。(まず大分類で
zip次に小分類でOpenOfficeとか、OLEでExcelとかですね。)

この辺りを整理すると、判定が効率的にでき、判定の結果も良くなり、
速度の向上も期待できると思います。

> これで mknmz も1.5から2倍は速くなるだろうと思っていたのですが
...
> 以前のレポートで最も処理時間がかかっていた
> File::MMagic::checktype_data 以上に
> File::MMagic::magicMatchStr が処理時間を取っています。
> 
> 使っている perl のバージョンv5.8.2と関係があるのかもしれませんが

最適化が違うので Perl 5.004, 5.005, 5.6, 5.8 とかで差がありそう
ですね。
また、プラットフォームごとに差はでるかもしれませんね。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内