2

我有一些 Perl 代码:

use HTML::Parse;
use HTML::FormatText;

# ...

my $txtFormatter = HTML::FormatText->new();

while ( ... ) {   # some condition
    my $txt = # get from a file
    my $html_tree = HTML::TreeBuilder->new_from_content($txt);
    $txt = $txtFormatter->format($html_tree);
    $html_tree->delete();
    # write $txt to a file
}

我注意到这个perl.exe过程的大小稳步增加(大约 200 万次循环迭代后增加到 600 MB)。如果我把HTML::TreeBuilder东西拿出来,它根本不会增加。我能做些什么来堵住这个泄漏吗?

4

1 回答 1

0

我无法使用以下脚本复制它:

#!/usr/bin/perl

use strict; use warnings;

use File::Slurp;
use HTML::FormatText;
use HTML::TreeBuilder;

my $formatter = HTML::FormatText->new;
my $html = read_file 'test.html';

while ( 1 ) {
    my $tree = HTML::TreeBuilder->new_from_content( $html );
    $formatter->format( $tree );
    $tree->delete;
}

我让这个脚本运行了几分钟,内存使用量(在任务管理器中)保持在 7,200K 和 7,300K 之间。

E:\首页> perl -v

这是为 MSWin32-x86-multi-thread 构建的 perl v5.10.1
(带有 2 个已注册的补丁,请参阅 perl -V 了解更多详细信息)

版权所有 1987-2009,拉里·沃尔

ActiveState http://www.ActiveState.com 提供的二进制构建 1006 [291086]
建于 2009 年 8 月 24 日 13:48:26
E:\Home> perl -MHTML::TreeBuilder -e "打印 $HTML::TreeBuilder::VERSION"
3.23
E:\Home> perl -MHTML::FormatText -e "打印 $HTML::FormatText::VERSION"
2.04
于 2010-08-05T21:46:30.077 回答