水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 鳩丸高速化計画

鳩丸高速化計画

2003年7月12日(土曜日)

鳩丸高速化計画

というわけで hatomaru.dll 高速化計画第一弾。

最近 hatomaru.dll が遅い気がしているわけですが、実はその原因のひとつは既に分かっています。コメントの数が増えたからです。コメントが増えると日記の表示は遅くなります。

コメントを表示しなければ関係ないのでは……と思うかも知れませんが、そうではありません。日記の各トピックには、ついているコメントの件数を表示しているからです。件数を表示するためには、コメントの数を数えなければなりません。

※見出しが付いたひとまとまりのことを、内部ではトピックと呼んでいます。そのまんま Topic というクラスになっています。

実は今まで、このルーチンに関してはほとんどなにも考えませんでした。あるトピックについているコメントの数をカウントする際は、GetCommentCount というメソッドを呼んでいます。そのメソッドの内容は以下のような処理になっています。

まあ特に何も考えていないのですが、恐ろしいのはここからです。ひとつのページ内に複数のトピックが表示される場合は、何も考えずにトピックの数だけ GetCommentCount が呼ばれます。XML ファイルのロードは一回しか行いませんが、XmlNodeList のサーチは表示されるトピックの数だけ繰り返されることになります。ページ表示の際に「URL が一致したか」という判定が何回行われるかというと、これはトピックの数×コメントの総数、となります。これはトピックが少ない場合、あるいはコメントが少ない場合にはほとんど問題ありませんが、両者が増えてくると大変なことになります。

……というわけなので、このアルゴリズムをちょっとだけ見直しました。具体的には、以下のような処理を入れています。

これだけですが、それでもトピック数が多いときの処理速度はかなり向上したはずです。特に、話題別で数の多いトピックを表示するときなどに効果が大きいかも。

※ただし、内部キャッシュがある場合の速度は変わりません。また、当然ですがコメント投稿機能実装以前の速度には及びません。

とは言え、これでもコメントの件数が増えればやっぱり遅くなります。根本的に異なる方法、たとえば、投稿するときに数えてその結果を保存しておくとか、そういった方法の方が速くなるような気はします。まあ、あまりにも遅くなったら、その時にまた考えましょう。

関連する話題: えび日記 / hatomaru.dll / 鳩丸高速化計画

最近の日記

関わった本など