HTML::Parser 関連のメモリリークらしき挙動への対処成功

300 万件の WEB ページの文字コード変換プログラムにおいて、メモリリークらしき現象に悩まされていた件。ひとまず解決した。

元々のプログラムでは HTML::Parser の派生クラスのオブジェクト(パーサ)を一回生成して使い回していた。これを改め、変換メソッドの中で毎回パーサを生成するようにした。変換メソッドではひとつのディレクトリの中にあるすべてのファイルに対して文字コードを判定(このときにパーサを用いる)し、変換して保存している。今回のケースではひとつのディレクトリの中に 1000 個弱のファイルが入っていたので、ひとつのパーサオブジェクトに食わせるファイルが 1000 個程度だったことになる。パーサ生成オブジェクトの生成に時間的コストはかかるが、メモリリークを減らすには必要に応じて再生成するのが正解なようだ。