Ich versuche, Kundendaten in großen Mengen zu bearbeiten (ein paar tausend Datensätze), und Magento verfügt immer noch nicht über genügend verfügbaren Speicher, um das Skript auszuführen.
Nach einigen Tests mit memory_get_usage()
dem Täter scheint dies die $customer->save()
Methode zu sein, die 5 MB Speicher für jede Speicherung benötigt, diese aber nicht freigibt, wenn sie abgeschlossen ist.
Wenn Sie ein paar tausend Datensätze durchlaufen, wird daher nicht genügend Speicher ausgeführt.
Folgendes habe ich bisher versucht:
$customer->clearInstance()
unset($customer)
Dies scheint jedoch nicht zu helfen.
Unten ist mein Code:
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
}
Jede Hilfe wäre sehr dankbar.
ps Ich bin mir nicht sicher, ob die clearInstance()
Funktion (im Mage_Core_Model_Abstract) irgendetwas tut. Wenn jemand einen Einblick in diese Funktion hat, wäre es sehr dankbar, wenn sie geteilt würde :)