Perl 为了提高内存效率,我应该重复使用单个HTML::SimpleLink对象吗?

Perl 为了提高内存效率,我应该重复使用单个HTML::SimpleLink对象吗?,perl,memory,memory-efficient,Perl,Memory,Memory Efficient,因此,这似乎是一个愚蠢的问题,但我正在构建一个内存资源非常有限的应用程序,因此我需要尽可能谨慎地使用内存。所以我的问题是,以下哪项更有效 while(<LINKS_FILE>) { my $extor = HTML::SimpleLinkExtor->new($resp->base); #$resp from above somewhere $extor->parse($_); my @links = $extor->links;

因此,这似乎是一个愚蠢的问题,但我正在构建一个内存资源非常有限的应用程序,因此我需要尽可能谨慎地使用内存。所以我的问题是,以下哪项更有效

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" }
}
while(){
我的$EXTER=HTML::SimpleLink XTOR->new($resp->base);#$resp来自上方某处
$EXTER->parse($\ux);
我的@links=$extor->links;
对于我的$link(@links){print“$link\n”}
}

my$extor=HTML::simplelinkxtor->new($resp->base)#$从上面某处响应
while(){
$EXTER->parse($\ux);
我的@links=$extor->links;
对于我的$link(@links){print“$link\n”}
$EXTER->清除链接;
}

因此,在第一种情况下,它每次都创建一个新的HTML::SimleLinkExtor对象,而在第二种情况下,它只是重置相同的对象以供再次使用。因此,在我看来,第二种方法的内存效率更高,但老实说,我真的不知道perl将内存释放回操作系统有多好,或者它是否会保留一些HTML::SimpleLink XTOR对象的内存,即使它们超出范围。谢谢你的帮助

我不想花时间分析,但如果我是你的情况,我会先试试。如果提供回调,它将不会保存在内部找到的链接,从而减少应用程序的占用空间。然后,您可以决定是存储链接,还是写入外部文件,以将内存使用降至最低:

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

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

只需测试它,尝试使用数千个HTML运行它,并查看每个HTML的内存消耗情况,在执行此操作时可能还尝试使用“基准”模块。Perl dosent会将内存释放回操作系统。。。。但它释放的内存将在需要时被perl重用,至少从我所知道的
LINKS\u文件
您正在解析的HTML文档中?我的直觉告诉我,最好不要向
simplelinkxtor
对象发送比特和片段。我不知道
HTML::simplelinkxtor
的内部结构,但是您最好将流交给解析器。
use HTML::LinkExtor;
my $parser = HTML::LinkExtor->new(sub {
     my($tag, %links) = @_;
     print "$tag @{[%links]}\n";
});

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