Я уже некоторое время использую XML :: Twig для довольно небольших XML-файлов без проблем.Около недели назад мне нужно было разобрать намного больший XML-файл, который был около 260 МБ.Файл содержался в zip-архиве (260 МБ - это размер несжатого файла).
Я загрузил весь файл в память (это заняло около 3 ГБ (около 50% от доступного), что и следовало ожидать).Затем я добавил / изменил некоторые значения и сохранил файл на диск, используя метод печати в файл.Как только все это было сделано, я провел чистку, думая, что верну память, использованную для разбора файла.Однако, похоже, это не так, и мне было интересно, почему?Я являюсь XML :: Twig версии 3.34 и perl версии 5.10.1 на компьютере с Linux.
Моя основная структура кода выглядит следующим образом:
my $Sheetx= $zip->contents('file1.xml');
my $tw11=new XML::Twig();
my $Sheetx_parse = $tw11->parse($Sheetx);
my $fh1PB_filename='file2.xml';
open(my $fh1PB, '>:encoding(UTF-8)', $fh1PB_filename) or die "Could not open file " . $fh1PB_filename . " $!";
$tw11->print($fh1PB);
close($fh1PB);
$tw11->purge();
my $member1 = $zip->removeMember('file1.xml');
my $member1A = $zip->addFile($fh1PB_filename,'file1.xml','8');
Любая помощь очень ценится.
PS Я знаю, что мог бы использовать обработчики веток, чтобы уменьшить использование памяти, но хотел бы знать, почему идея очистки, кажется, не работает при разборе всего файла.