4

XML::Twig を使用して大きな xml ファイル (約 100,000 レコード) を解析しようとしていますが、perl の解析はエラーで失敗します:

perl.exe - Application Error: 
The instruction at "0x28086920" referenced memory at "0x00000004". The memory could not be "written"...

XML::Twig問題なく大きなxmlファイルを解析することを読みましたが、私の場合は上記のエラーで失敗します。

私の .pl ファイルには、以下のように 100,000 回回転する forloop コードがあります。

foreach my $d1(@detailData)   {
    if ($d1->first_child('a')->getElementsByTagName('b')) {
        $id= $d1->first_child('a')->first_child('x')->field('b');
    }
    ....
    .....
    ......

}

forloop の中には、上記のように約 20 の if ループがあります。それはメモリの問題を引き起こしていますか?

このメモリの問題を克服する方法を誰かに教えてもらえますか?

4

1 に答える 1

6

グーグルで調べた後、問題はファイルをメモリに一度にロードすることから生じると推測します。perl "The memory could not be written"たとえば、http://www.perlmonks.org/?node_id=457265を参照してください。 (たとえば、Cygwin perl で Activestate パッケージを使用する場合は、http: //cygwin.com/ml/cygwin/2006-12/msg00798.html を参照してください)。

XML::Twig が巨大なファイルを処理するには、ファイルのどの部分を処理するかを伝える必要があります (通常、サブツリーを処理して破棄するハンドラを定義することによって)。モジュールのドキュメントを参照してください。

于 2012-01-31T11:35:34.073 に答える