Сбой при разборе большого XML-файла с использованием XML :: TWIG - PullRequest
4 голосов
/ 31 января 2012

Я пытаюсь проанализировать большой XML-файл (около 100 000 записей), используя XML :: Twig, но синтаксический анализ perl завершается ошибкой:

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

Я прочитал, что XML::Twig анализирует большие XML-файлы без каких-либо проблем, но в моем случае происходит сбой с вышеуказанной ошибкой.

Мой файл .pl содержит код forloop, который вращается 100 000 раз, как показано ниже:

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

}

Внутри петли у меня около 20 петель, как указано выше. Это вызывает проблемы с памятью?

Может кто-нибудь подсказать, как побороть проблемы с памятью?

1 Ответ

6 голосов
/ 31 января 2012

После поиска в Google для perl "The memory could not be written" Я бы предположил, что проблема заключается либо в загрузке файла сразу в память, см., Например, http://www.perlmonks.org/?node_id=457265, либо (менее вероятно) в микширующих модулях, скомпилированных различными компиляторами (например, используя пакеты Activestate с Perl Cygwin, см. http://cygwin.com/ml/cygwin/2006-12/msg00798.html).

Чтобы XML :: Twig мог работать с большими файлами, вам нужно указать, на каком уровне обрабатывать части файла (обычно путем определения обработчиков, которые обрабатывают поддерево, а затем отбрасывают его), см. Документы модуль.

...