新月の開発

0956f170 :Anonymous 2007-07-29 07:04
朔について、バグではないのですが、処理が重いところがあったので報告します。

最近Pentium III 1GHzが数分間ビジー状態になるので調べてみたところ、netstatと朔のログを見るかぎり、server.cgiのrecentが重いようです。
調べてみたところ、do_recentに次のような処理を行なっている部分がありました。

1. recent.txtの各行に対して、要求された時刻引数にマッチするか調べる。
2. マッチしたら、その行に対応するCacheオブジェクトを作る。
3. そのCacheオブジェクトを使ってtagを調べる。

さらにCacheの__init__では、recordディレクトリをスキャンしてRecordオブジェクトを作っています。

for k in listdir(self.datpath + "/record"):
self[k] = Record(datfile=self.datfile, idstr=k)

Recordオブジェクトは__init__されただけではファイルを読み込まないとはいえ、31日分で8000行ほどあるrecent.txtの各行に対して、ディレクトリがスキャンされ、数百から数千のオブジェクトが作られるというのが負荷になっているように思えます。
#ちゃんとプロファイルを取った訳ではないので、憶測です。

tagを読み込むだけが目的のため、CacheではなくTagListを作るようにすればよいと思うのですがどうでしょうか。
Powered by shinGETsu.