Mechanizeの罠

今使ってる某グループウェアのメール機能が、正直ひどすぎる。どのくらいひどいかは以前日記に書いた気がするので省略するが、非常に困るのが、一括で振り分けしたり削除したりするメール整理機能が極めて貧弱で、エクスポートにいたってはそもそも機能がないことだ。じゃあそこにたまった400MBほどのメールを速やかに整理をしたうえ引き継ぎを行わなくてはならないとしたら、どうするか?


RubyでMechanizeなのです←結論 (言ってみたかった)


さて、だいたいできたと思ってしばらく自動ダウンロードさせてみたところ、途中からめちゃくちゃ遅くなってタイムアウトで死亡する。タスクマネージャ(Windowsね)を見たら、実メモリ512Mのマシンでページファイルが1Gとかになってた。ガベコレを疑ってループの途中に GC.start とか挟んでみたが改善しない。


どうも max_history が初期値の nil のままだと無制限にWWW::Mechanize::Pageオブジェクトの履歴が残ってその分のメモリが解放されないらしい。


というわけで、とくに履歴を残す要件がない場合は、max_history = 1 とかにするべし。というか、デフォルトで自滅する罠が仕掛けられているのは、どうかと思う。


<参考>