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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何修复Magento中与load()方法相关的内存泄漏?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将数据(产品,客户和订单)从Magento商店导入另一个Magento商店.

例如,当我尝试导入产品时,我需要加载产品以检查它是否已存在并使用已加载产品的某些属性.
我正在使用方法Mage :: getModel(‘cataLOG / PRoduct’) – > load($sku)并使用命令行运行脚本.

就像是:
    $PHP -f shell / mymodule.PHP

问题是当我在循环中使用load()方法时,Magento不会停止增加内存使用量.

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++;
}@H_502_20@ 
 

> 1 – 记忆:28147376
> 2 – 内存:34600320
> 3 – 记忆:34661976
> 4 – 内存:34721128
> 5 – 内存:34776600
> ……
> 10 – 内存:35051216
> ……
> 100 – 记忆:40148904

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

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

找到了一种改变Magento核心的解决方案,但它是为Magento 1.4制作的,并不适用于我正在使用的Magento 1.9.

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

有没有有效的解决方案来防止Magento 1.9中内存使用的增加

解决方法

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

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何修复Magento中与load()方法相关的内存泄漏?全部内容,希望文章能够帮你解决php – 如何修复Magento中与load()方法相关的内存泄漏?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。