ゆきのぶ日記
2008/12/02(Tue) [長年日記]
■ [Perl] WWW::Mechanize の消費メモリ関するメモ
Perl における WWW::Mechanize は、使い続けていると際限なくメモリを消費する。その理由は、今まで読んだページを全部記憶しているからだ。
Ruby においては max_history という設定パラメータをで、この問題を回避できるらしい。しかし、どうも Perl の WWW::Mechanize にはそれが見あたらない。
調べてみると、Perl における解決策は 2 つあるようだ。
comp.lang.perl.modules: WWW::Mechanize memory leak??? Please help!
1 つは、WWW::Mechanize のオブジェクトを毎回ないしは、一定期間毎に作り直すという方法。一応は確実に問題を解決できるものの原始的で、ログイン中のセッション情報なども全て破棄されてしまう。
もう 1 つは back() メソッドを使う方法。back() を一回呼ぶ毎に、最後に読み込んだページの情報がクリアされる。この方法だと、セッション情報などについては保持されるものの、何回ものページ遷移を伴う処理を記述する場合に、何ページ遷移したかを覚えておいて、その回数分だけ back() を呼ぶという、不毛な処理を書かないといけない。
どちらにしてもスマートさに欠ける解決策だけど、Perl で見つかったのはこのくらい。ちょっと Ruby が羨ましくなる。
[ツッコミを入れる]