我有一些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
的东西,它就不会增加。我能做些什么来堵塞这个漏洞吗?
答案 0 :(得分: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:\Home> perl -v This is perl, v5.10.1 built for MSWin32-x86-multi-thread (with 2 registered patches, see perl -V for more detail) Copyright 1987-2009, Larry Wall Binary build 1006 [291086] provided by ActiveState http://www.ActiveState.com Built Aug 24 2009 13:48:26
E:\Home> perl -MHTML::TreeBuilder -e "print $HTML::TreeBuilder::VERSION" 3.23
E:\Home> perl -MHTML::FormatText -e "print $HTML::FormatText::VERSION" 2.04