Я почти уверен, что Эшли права, когда указывает на транзакции и связанные с ними дорогостоящие операции ввода-вывода.
Что касается части XML, то с учетом размера входного документа 22 МБ вам потребуется около 200 МБ памяти, но обработка должна быть достаточно быстрой, в диапазоне секунд, а не минут.
Одна вещь, которая выглядит неэффективной, это выражение XPath для всего сканирования документов. Может ли Mediathek/Filme
действительно появляться где-нибудь в документе? Или это скорее что-то вроде /Archiv/Mediathek/Filme
? Использование //
неэффективно, если механизм не оптимизирует это выражение (насколько я знаю, XML :: LibXML не делает).
Другое дело, что вы могли бы использовать $node->getChildElements
вместо $node->findnodes("*")
(не нужно писать ./*
), но я не думаю, что это будет иметь большое значение.