Tôi đang cố gắng chỉnh sửa hàng loạt dữ liệu khách hàng (một vài nghìn bản ghi) và Magento tiếp tục hết bộ nhớ khả dụng để chạy tập lệnh.
Sau một số thử nghiệm với memory_get_usage()
thủ phạm dường như là $customer->save()
phương pháp dường như chiếm 5M bộ nhớ cho mỗi lần lưu nhưng không giải phóng nó khi hoàn tất.
Kết quả là, khi lặp qua vài nghìn bản ghi, nó đang chạy bộ nhớ.
Đây là những gì tôi đã thử cho đến nay:
$customer->clearInstance()
unset($customer)
Điều này dường như không giúp đỡ mặc dù.
Dưới đây là mã của tôi:
public function createCustomerAddress($customerAddressData, $email){
$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
$address = Mage::getModel('customer/address');
$address->addData($customerAddressData);
$customer->addAddress($address);
unset($address);
try{
$customer->save();
}catch (Exception $e){
var_dump($customerAddressData);
var_dump($e->getMessage());
}
echo "\n" . "Before unsetting \n" . memory_get_usage() . "\n";
$customer->clearInstance();
unset($customer);
echo "\n" . "After \n" . memory_get_usage() . "\n"; // no difference than before
}
Mọi sự trợ giúp sẽ rất được trân trọng.
ps Tôi không chắc clearInstance()
chức năng (trong Mage_Core_Model_Ab bát) có làm gì không, nếu ai đó có cái nhìn sâu sắc về điều này, nó sẽ được đánh giá rất cao nếu được chia sẻ :)