私は顧客データを一括で編集しようとしています(数千レコード)。Magentoはスクリプトを実行するために利用可能なメモリを使い果たし続けています。
memory_get_usage()
犯人とのいくつかのテストの後、$customer->save()
保存ごとに5Mのメモリを使用するように見える方法のようですが、完了時に解放しません。
その結果、数千のレコードをループするときに、メモリが不足しています。
これが私がこれまでに試したことです:
$customer->clearInstance()
unset($customer)
これは助けにはならないようです。
以下は私のコードです:
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
}
どんな助けでも大歓迎です。
ps clearInstance()
(Mage_Core_Model_Abstract内の)関数が何かを実行するかどうかはわかりません。誰かがこれについて何らかの洞察を持っている場合、共有されていれば非常にありがたいです:)