Při vytváření velkých dávkových importů, jako je tento, je třeba dodržovat dvě pravidla:
-
Zakázat protokolování SQL:(
$manager->getConnection()->getConfiguration()->setSQLLogger(null);
), abyste zabránili velké ztrátě paměti. -
Místo pouze jednou na konci proplachujte a čistěte často. Navrhuji přidat
if ($i % 25 == 0) { $manager->flush(); $manager->clear() }
uvnitř vaší smyčky, aby se vyprázdnil každých 25 INSERTů.
UPRAVIT: Poslední věc, na kterou jsem zapomněl:neuchovávejte své entity uvnitř proměnných, když je už nepotřebujete. Zde ve vaší smyčce potřebujete pouze aktuální entitu, která se zpracovává, takže neukládejte předchozí entitu do $coordinatesfrcity
pole. Pokud v tom budete pokračovat, může to vést k přetečení paměti.