1

次のコード スニペットでメモリ リークが発生しています (と思います)。

if (ref($init{'time-layout'}) eq 'HASH') {
    my %time= % {$init{'time-layout'}};
    my @times= @ {$time{'start-valid-time'}};
    if (ref($init{parameters}) eq 'HASH') {
        %param= % {$init{parameters}};
        if (ref($param{'wind-speed'}) eq 'HASH') {
            %wind= % {$param{'wind-speed'}};
            @windvalue= @ {$wind{value}};
            %temp= % {$param{'temperature'}};
            @tempvalue = @ {$temp{value}};
            %wdir= % {$param{'direction'}};
            @wdirvalue = @ {$wdir{value}};
            %hum= % {$param{'humidity'}};
            @humvalue = @ {$hum{value}};
        undef %wind;
        undef %temp;
        undef %wdir;
        undef %hum;}
    undef %param;}

これはサブからのもので、入力はXMLin() ( XML::Simpleから) から来ます。具体的には、入力は(重要な場合)

http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?    lat=$lat&lon=$lon&product=time-series&begin=2004-01-01T00:00:00&end=2013-04-20T00:00:00&temp=temp&wspd=wspd&rh=rh&wdir=wdir";

ここで$lat、 と$lonは緯度と経度です。

コードを実行して SQL サーバーにデータをプラグインするのに数時間かかり、それが完了するかなり前に、Perl のインスタンスが数 GB 以上の RAM を消費します。これは誰かにとっては簡単なことだと思いますが、私はせいぜい Perl の初心者です。

4

3 に答える 3

1

imranさんのコメントに加え、

非常に多くの XML cpan モジュールがあるため、どれを使用すべきかを判断するのは非常に困難です。

多くの人からの回答を見て、ウェブから読むと、XML::LibXMLは好ましいモジュールであり、大きなファイルにはより具体的なXML::LibXML::Readerのように見えます。それらの多くは使用を推奨しておらず、小さなファイルには適しているが、大きな xml ファイルになると問題があるXML::Simpleと言っています。(ドキュメントから)より優れていますが、それでもメモリリークの問題があります。( XML::Twig faqを参照)XML::SimpleXML::Twig

perl-xml-faqも参照したい

于 2013-04-04T10:17:34.993 に答える