首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复Magento中与load()方法相关的内存泄漏?

如何修复Magento中与load()方法相关的内存泄漏?
EN

Stack Overflow用户
提问于 2016-05-23 07:52:10
回答 2查看 2K关注 0票数 4

我正在将数据(产品、客户和订单)从Magento商店导入到另一个Magento商店。

例如,当我试图导入产品时,我需要加载产品来检查它是否已经存在,并使用加载产品的一些属性。我使用Mage::getModel('catalog/product')->load($sku)方法,并使用命令行运行脚本。

类似于:$ php -f shell/mymodule.php

问题是,当我在循环中使用load()方法时,Magento并没有停止增加内存使用量。

代码语言:javascript
复制
foreach ($result['items'] as $item) {
     echo $index . ' - Memory: ' . memory_get_usage() . "\n";

     /** @var Mage_Catalog_Model_Product $product */
     $product = Mage::getModel('catalog/product');
     $product->load($product->getIdBySku($item['sku']));

     $product->getOptionInstance()->unsetOptions()->clearInstance();
     unset($product);
     gc_collect_cycles();

     $index++;
}
  • 内存: 28147376
  • 2-内存: 34600320
  • 3-内存: 34661976
  • 4-内存: 34721128
  • 5-内存: 34776600
  • ..。
  • 10 -内存: 35051216
  • ..。
  • 内存: 40148904

在某些情况下,我需要导入数千种产品,这会导致内存溢出。正如您在上面的脚本中所看到的,我还尝试在foreach中运行一些优化函数,但这在性能上还不足以防止内存溢出。

代码语言:javascript
复制
$product->getOptionInstance()->unsetOptions()->clearInstance();
unset($product);
gc_collect_cycles();

我找到了一种改变Magento核心的解决方案,但是它是为Magento1.4设计的,并且不适用于我正在使用的Magento1.9。

https://ringsdorff.net/2009/07/23/guest-post-fix-for-memory-leaks-in-magento/

有什么有效的解决办法来防止在Magento 1.9中增加内存使用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-24 17:42:16

您可以使用Mage::getSingleton()方法,它将减少50%的内存问题,并尝试以块的形式执行数据。

票数 1
EN

Stack Overflow用户

发布于 2016-05-24 12:32:18

尝试Mage::getSingleton('catalog/product');而不是Mage::getModel('catalog/product');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37385464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档