O Doctrine 1.x tem muitos problemas de desempenho. No ano passado fui forçado a usar e tive muitos problemas.
Se você precisa escrever grandes tarefas ou migrações com toneladas de objetos de doutrina, você pode tentar utilizar o coletor de lixo php.
Primeira tentativa
foreach ($collection as $object) {
// some code
unset($object);
}
Infelizmente, o objeto tem referências circulares e o coletor de lixo não pode lidar com isso.
A maneira certa
foreach ($collection as $object) {
// some code
$object->free(true);
unset($object);
}
Objetos de doutrina, coleções e consultas têm método livre . Se você passar true, o método irá liberar recursivamente todas as referências. Agora o coletor de lixo php funciona bem e até mesmo uma grande tarefa de sincronização pode ser executada em uma execução.