Dica de desempenho do Doctrine Huge Collections

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.