2003年12月28日(日曜日)
続・鳩丸高速化計画その6・メモリ上に XmlDocument を保持する
こんな感じに。
- HatomaruDataHolder クラスを作成。これは NameObjectCollectionBase の派生クラスで、XmlFile のコレクションを持ちます。GetXml() メソッドにファイル名を渡すと、ファイル名をキーとする XmlFile のエントリが作成されて Load() されます。しかし、既にそのエントリが存在していて、かつファイルが更新されていない場合、Load() しないでそのまま返します。
- Hatomaru クラスは、この HatomaruDataHolder を静的メンバとして持ちます。HatomaruDataHolder のコンストラクタは Hatomaru クラスが初期化されるときに呼び出され (インスタンスが初期化されるときに、ではないことに注意)、以後ずっとメモリに残ります (たぶん)。
これによって、メモリ上に XmlDocument (の、派生クラスである XmlFile) のインスタンスが保持されたままになっているので、いちいち Load() しなくて済むようになった……と思います。
※FileInfo を Refresh() するのを忘れていてハマりましたが、まあ何とか。
あとは、やはりコメントの検索に時間がかかっているので、ここを何とかする必要があります。いちいち掲示板のコメント約 1500件を検索し、これに約15秒 (!) かかっているので遅いです。ここは、データ構造をどうにかしないとどうにもならないわけで……。
- 「続・鳩丸高速化計画その6・メモリ上に XmlDocument を保持する」にコメントを書く
関連する話題: C# / プログラミング / えび日記 / hatomaru.dll / 鳩丸高速化計画
続・鳩丸高速化計画その7・日記関係
日記関係の方向。
- 全トピックにユニークな連番を付加して、それを URL にする方向。長い URL も当面は使用可。
- そうなると連番がユニークであるかどうか検査しないとマズいので、一度は全部なめる必要あり。だったら、最初に XML を全読してトピックをインスタンス化し、それをメモリ上にキャッシュしてしまった方が良いかも知れません (メモリには余裕があるので贅沢に使って問題ない、と思います)。ローカルで検査しても良いのですが、それは絶対忘れるので。
- 掲示板コメントとの関連を示す XML を別途設ける方向。
- 掲示板の記事も全部インスタンス化した状態でメモリに置いておく。
- HashTable だと検索が発生するので、Array で保存する方向。new Topic[1500] とかいう凄い Array ができることになりますが、HashTable だとしても内部的に Array を作っているのでしょうし。
※……でもローカルのテスト環境はちょいツラい。
関連する話題: C# / プログラミング / えび日記 / hatomaru.dll / 鳩丸高速化計画
- 前(古い): 2003年12月27日(Saturday)のえび日記
- 次(新しい): 2003年12月29日(Monday)のえび日記