DesktopSidebarが異様に重いのを解消する

DesktopSidebarはRSSをながら見するには非常にいいツールなのだけど、なんだか最近やけに重いなあと思って原因を調べてみたら、ちょっとびっくりした。
原因は

  • キャッシュ溜め込みすぎ
  • 削除したはずの設定消えていない

の2点だったので、

  • 巡回リストをOPMLでExportして保存
  • アンインストールして過去のキャッシュまで削除(キャッシュは C:\Documents and Settings\ユーザ名\Application Data\Desktop Sidebarにある)

ってな感じで問題解消。一時期DesktopSidebarだけで数百MBものメモリを消費していたりしたんだけど、一気に10MB程度ぐらいまでになった。メモリの空が大幅に増えたのでめっちゃ快適な環境になりました。
以下詳細。
DesktopSidebarの設定はsidebar105.settingというファイルに全て書き込まれているようなのだけど、これの処理が結構いい加減なことが分かった。巡回するURLのリストはGUIの設定画面から行えるのだけど、設定画面のリストからもう巡回しいでいいものを削除しても設定からは削除されない。そのため定期巡回のたびに一度設定したことのあるURLは全て巡回されているようだ。なんそれ、消した意味ないじゃない!
そして最大の問題はキャッシュにあった。DesktopSidebarは取得したRSSを次のように処理しているようだ。

  1. RSSをダウンロード
  2. RSSをパース
  3. パースしたものをエントリーごとに分ける
  4. 過去のエントリーがすべて(!)入っているキャッシュと比較し、まだキャッシュに入っていないエントリーを保存
  5. 更新されたものを表示

そして問題のキャッシュファイルはいままで取得されたエントリーが全て保存されているものだから1サイト数十MB、これが数十個あるから…。これらを全て開きダウンロードしてきたエントリーと比較し、しかもおそらく比較方法は線形探索しているので、そらまあ重くもなります。
僕なんか作るものは全部プロトタイプみたいなものだから、継続的に使ったときの処理とかあんまり考えることはないのだけど、考えないで作るとひどいことになるんだなあといういい例でした。