このような大規模なバッチインポートを作成するときに従うべき2つのルール:
-
SQLロギングを無効にする:(
$manager->getConnection()->getConfiguration()->setSQLLogger(null);
)大量の記憶喪失を避けるため。 -
最後に1回だけではなく、頻繁にフラッシュしてクリアします。
if ($i % 25 == 0) { $manager->flush(); $manager->clear() }
ループ内で、25個のINSERTごとにフラッシュします。
編集: 最後に忘れてしまったのは、エンティティが不要になったときに、エンティティを変数内に保持しないことです。ここで、ループでは、処理中の現在のエンティティのみが必要なので、前のエンティティを$coordinatesfrcity
に保存しないでください。 配列。これを続けると、メモリオーバーフローが発生する可能性があります。