トップ «前の日記(2008/11/30(Sun)) 最新 次の日記(2008/12/08(Mon))» 編集

ゆきのぶ日記


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 が羨ましくなる。