perl - 是否应该重用单个HTML::SimpleLinkExtor对象以提高内存效率?

标签 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在将内存释放回os方面有多好,或者它是否会在某些情况下保留在内存中HTML::SimpleLinkExtor对象,即使它们超出范围。谢谢您的帮助!

最佳答案

我不愿意花时间进行剖析,但是如果您遇到这种情况,我将首先尝试HTML::LinkExtor。如果提供回调,它将不会保存在内部找到的链接,从而减少了应用程序的占用空间。然后,您可以决定是存储链接还是写入外部文件,以将内存使用降至最低:

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

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

关于perl - 是否应该重用单个HTML::SimpleLinkExtor对象以提高内存效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384808/

相关文章:

mysql - 将数组插入 MongoDB

Perl Mojolicious 和 Socket.IO 运行不佳

c - 如何将链表的头节点地址存储在文件中并稍后检索

iPhone 由于 stringWithUTF8String 导致内存泄漏

CSS 对具有多个类的元素的特殊性

perl - 在 Perl 中使用 argv[0] 拒绝空白查询

arrays - Perl:请向我解释 while() 的以下行为

java - 当Solr中文档大小大于内存时?

r - 宽格式数据还是长格式数据效率更高?

javascript - javascript 变量可以是 2Mb 长吗?