我的平台是 PHP 5.2、Apache、Magento EE 1.9 和 CentOS。
我有一个非常基本的脚本,它使用 PHP 的 ms_sql() 函数从 MS-SQL 数据库中获取大约 60,000 行数据。然后通过来自 Magento 的数据对数据进行一些处理,最后写入文本文件。
真的很简单的东西...
$result = mssql_query($query);
while($row = mssql_fetch_assoc($result)) {
$member = $row; // Copied so I can modify it
// Do some stuff with each row... e.g.:
$customer = Mage::getModel("customer/customer");
$customer->loadByEmail($member["email"]);
$customerId = $customer->getId();
// Some more stuff like that...
$ordersCollection = Mage::getResourceModel('sales/order_collection');
// ...........
// Some more stuff like that...
$wishList = Mage::getModel('wishlist/wishlist')->loadByCustomer($customer);
// ...........
// Write straight to a file
fwrite($fp, implode("\t", $member) . "\r\n");
// Probably not even necessary
unset($member);
}
问题是,我的脚本的内存使用量随着循环的每次迭代而增加(每 300 行大约 10MB),理论峰值约为 2GB(尽管它还没有达到)。
我已经竭尽全力确保我不会在内存中留下任何数据。没有构建巨大的数组,没有添加变量,unset()
循环的每次迭代都会或直接覆盖所有内容。
所以我的问题是:Magento 函数会导致内存泄漏吗?
如果是这样,我该如何阻止他们这样做?
理想情况下,这个脚本应该是完全“被动的”:只需获取查询结果,稍微修改它们(为此需要非常临时的内存),然后将它们直接转储到文件并销毁内存。但这并没有发生!
谢谢