Kakasi の分かち書きのパフォーマンスを向上させるパッチ

グラフ


Kakasi の分かち書きのパフォーマンスを向上させるパッチというものを作成して、パッチセクションに登録した。これまで気になっていた、分かち書きの処理にかかる時間を短縮するためのものだ。
これまで、Text-Kakasi のパラメータ指定を、メール 1 行 1 行を処理するたびに行っていたのだけど、そうすると毎回毎回 Kakasi の辞書ファイルを開いて閉じてを繰り返すことになる。これをやめて、最初に辞書を開いておいて、終了時に閉じるというふうに変更してみたところ、体感できるくらい処理速度が向上した。この変更によって、待機中の使用メモリが増えることになるが、速度の向上分を考えれば問題ないレベルではないかと思う。私の環境で、メールの処理にかかる時間を比較してみたところ、0.22.2 では、メール 1 通の処理にかかる時間のうち約 3 割が Kakasi分かち書きに使われていたのに対して、この変更を行ったあとは、1 割以下となった。すなわち、1 通あたりの処理時間が、20% 以上速くなったということだ。(右の図が、テストの結果をグラフにあらわしたもの。横軸がメールの処理にかかった時間で、縦軸が分かち書きにかかった時間。上は 0.22.2、下はパッチ適用後)
待機時のメモリ使用量を増加させないためには、メール 1 通の受信開始時に辞書ファイルを開き、受信終了時に閉じるというアプローチも考えられるが、まずはパフォーマンス優先ということで上記のようにしてある。
また、0.22.2 において、Windows 環境で POP3 同時接続を使用した場合に異常終了してしまう問題を回避するための排他処理を追加したが、この部分がボトルネックになってしまってしまっていた。そこで、これも、メールの 1 行を処理するたびに排他処理を行っていたものを、メール 1 通ごとに変更してみた。これによって、複数のメールアカウントのメールを同時に受信しても、それほどパフォーマンスが低下することはなくなった(もちろん、1 通のメールを処理している間は他のメールを受信することができないので、そういう意味では「同時に」受信しているわけではないのだけど)。
以上の変更後、私の環境で簡単なテストを行ってみたところ、分かち書きにかかる時間が約 7 〜 8 分の 1 に短縮された。これは結構大きな変化だ。Windows 環境で同時受信を行ったときはもちろん、Mac OS X で普通に受信したときでも体感できる。
このパッチを使用するためには、Text-Kakasi 2.04 が必要。Windows 版のインストーラには、Text-Kakasi 1.4(確か)が入っているので、Windows 版で試す場合には Text-Kakasi をアップデートする必要がある。namazuWindowsインストーラに含まれている ppd ファイルを使ってインストールするか、パッチセクションに登録したバイナリを使ってほしい(Windows XP Pro SP2、Windows 2000 Pro SP4 にて動作確認)。
また、パッチには、以前投稿した、Base64 への対応パッチも含まれている。



ということで、このパッチをベースに、次のバージョン(0.23.0)に向けての日本語化パッチとしてまとめたいと考えている。動作テストしていただける方、また、ご意見をお待ちしています。