namazu-ml(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Namazu 1.9.2



# namazu-devの方に振ります。

<199909070355.MAA12306@xxxxxxxxxxxxxx>の記事において
私は書きました。

>> >>     my $mtype_c = $mm->checktype_contents($$contref);
>> >> 
>> >>   にかなり時間を取られている。File::MMagic の
>> >>   checktype_contents() を改良する必要がある。
>> >>   よろしくお願いします。 > 野首さん
>> 
>>   そうだろうという気はしてました...

  実際のボトルネックがどこにあるのかを調べるために、profilerにかけて
ました。
  Devel::DProfをインストールし、perl -d:DProf mknmzとして実行した後生
成されたtmon.outをdprofpp -uにかけた結果、以下の通りになりました。

# HTML 35 file(hns 2.0pl0のドキュメント)を処理対象としています。

Total Elapsed Time = 18.99530 Seconds
         User Time = 10.43520 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 25.7   2.690  2.690      1   2.6900 2.6899  mknmz::write_phrase_hash_sub
 11.4   1.190  1.154  14549   0.0001 0.0001  mknmz::hash
 10.9   1.147  1.788   3564   0.0003 0.0005  File::MMagic::readMagicEntry
 6.32   0.660  0.660     36   0.0183 0.0183  File::MMagic::checktype_data
 5.75   0.600  0.599    217   0.0028 0.0028  mknmz::wordcount_sub
 5.75   0.600  0.557  17280   0.0000 0.0000  IO::Handle::eof
 4.88   0.509  1.657     36   0.0141 0.0460  mknmz::make_phrase_hash
 4.69   0.489  0.524     35   0.0140 0.0150  html::weight_element
 4.02   0.420  0.413   2916   0.0001 0.0001  File::MMagic::readMagicLine
 3.83   0.400  0.798   2916   0.0001 0.0003  File::MMagic::magicMatchStr
 2.29   0.239  3.220     36   0.0066 0.0894  File::MMagic::checktype_contents
 1.92   0.200  0.865     36   0.0055 0.0240  mknmz::count_words
 1.82   0.190  0.190      1   0.1900 0.1898  mknmz::write_index_sub
 1.25   0.130  0.130     70   0.0019 0.0019  gfilter::line_adjust_filter
 1.15   0.120  0.130      1   0.1199 0.1297  mknmz::load_modules

  readMagicEntryが問題になっているようです。この関数は、File::MMagicが
内包しているmagic fileからエントリを読み出すという処理を行うものなので
すが、File::MMagic objectを1 fileごとに生成しているため、毎回この関数
が呼ばれるのが重くなる原因のようです。

  objectを最初に1つだけ生成し、それを使い回すようにするだけでかなり改
善できそうですので、一度そのように修正して動作チェックをしてみます。
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
        nokubi@xxxxxxxxx (official)