Hai quy tắc cần tuân theo khi bạn tạo nhập hàng loạt lớn như thế này:
-
Tắt tính năng ghi nhật ký SQL:(
$manager->getConnection()->getConfiguration()->setSQLLogger(null);
) để tránh mất bộ nhớ lớn. -
Xả và làm sạch thường xuyên thay vì chỉ một lần vào cuối. Tôi khuyên bạn nên thêm
if ($i % 25 == 0) { $manager->flush(); $manager->clear() }
bên trong vòng lặp của bạn, để xóa mỗi 25 INSERT.
CHỈNH SỬA: Một điều cuối cùng tôi đã quên:không giữ các thực thể của bạn bên trong các biến khi bạn không cần chúng nữa. Ở đây, trong vòng lặp của bạn, bạn chỉ cần thực thể hiện tại đang được xử lý, vì vậy đừng lưu trữ thực thể trước đó trong $coordinatesfrcity
mảng. Điều này có thể dẫn đến tình trạng tràn bộ nhớ nếu bạn tiếp tục làm như vậy.