Каким образом парсите XML? На файлах большого объёма надо использовать способы, не загружающие файл в память. Например через XMLReader.
Как происходит добавление в базу? Доктриной? Если да, то надо разбивать добавление на небольшие пачки. Через каждые 100-200 $em->persist нужно делать $em->flush() и удалять сущности из списка управляемых $em->getUnitOfWork()->clear()
Ещё надо учесть, что в dev окружении каждый запрос профилируется, и при больших объёмах данных это даёт многократное замедление. Надо или делать запросы в prod окружении, или отключить профилирование:
$this->em->getConnection()->getConfiguration()->setSQLLogger(null);
foreach ($this->em->getEventManager()->getListeners() as $event => $listeners) {
foreach ($listeners as $listener) {
$this->em->getEventManager()->removeEventListener($event, $listener);
}
}