3

これはばかげた質問のように思えるかもしれませんが、メモリが非常に限られたリソースであるアプリケーションを構築しているため、メモリの使用についてできる限り注意する必要があります。だから私の質問は、次のうちどれがよりメモリ効率が良いですか?

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 オブジェクトを作成しますが、2 番目の例では、同じものを再度使用するためにリセットするだけです。したがって、2番目の方がメモリ効率が高いように思えますが、正直なところ、メモリをOSに解放することについてperlがどれほど優れているか、または一部のメモリを保持するかどうかはよくわかりませんHTML::SimpleLinkExtor オブジェクトがスコープ外になった後でも。助けてくれてありがとう!

4

1 に答える 1

1

私はプロファイリングに時間を費やすつもりはありませんが、私があなたのような状況にあった場合、最初にHTML::LinkExtorを試してみます。コールバックを提供すると、内部で見つかったリンクが保存されないため、アプリケーションのフットプリントが削減されます。次に、メモリの使用を最小限に抑えるために、リンクを保存するか、外部ファイルに書き込むかを決定できます。

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

$parser->parse_file("index.html");
于 2012-07-08T18:37:21.443 に答える