我应该重复使用单个HTML :: SimpleLinkExtor对象来提高内存效率吗?

时间:2012-07-08 16:38:48

标签: perl memory memory-efficient

所以这看起来似乎是一个愚蠢的问题,但我正在构建一个内存非常有限的应用程序,因此我需要尽可能谨慎地考虑内存使用情况。所以我的问题是,以下哪项内存效率更高?

while(<LINKS_FILE>) {
    my $extor = HTML::SimpleLinkExtor->new($resp->base); #$resp from above somewhere
    $extor->parse($_);
    my @links = $extor->links;
    for my $link (@links) { print "$link\n" }
}

my $extor = HTML::SimpleLinkExtor->new($resp->base); #$resp from above somewhere
while(<LINKS_FILE>) {
    $extor->parse($_);
    my @links = $extor->links;
    for my $link (@links) { print "$link\n" }
    $extor->clear_links;
}

所以在第一次它每次创建一个新的HTML :: SimleLinkExtor对象,而在第二次它只是重置相同的一个再次使用。所以在我看来,第二个会更有效,但说实话,我真的不知道perl是如何将内存释放回操作系统,或者它是否会坚持到某些HTML :: SimpleLinkExtor对象的内存,即使它们超出范围。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我不倾向于花时间分析,但如果我遇到你的情况,我会首先尝试HTML::LinkExtor。如果您提供回调,它将不会保存它在内部找到的链接,从而减少了应用程序的占用空间。然后,您可以决定是存储链接,还是写入外部文件,以尽量减少内存使用:

use HTML::LinkExtor;
my $parser = HTML::LinkExtor->new(sub {
     my($tag, %links) = @_;
     print "$tag @{[%links]}\n";
});

$parser->parse_file("index.html");