magento - block toHTML 导致内存泄漏

标签 magento memory-leaks cron magento-1.7

我对所有产品(在 cron 内)进行了一个简单的循环,以生成一个 block 并缓存结果,

但是 toHhtml 方法可以让每个产品的 memory_get_usage() 增长到大约 0.1M

我可以减少 getModel 负载的影响,但 toHTML 会杀死它

foreach($products as $productid) {

// leaks but clear instance helps
$model = Mage::getModel("catalog/product")->load($productid);

$block1 = Mage::app()->getLayout()->createBlock("catalog/product_list_upsell");
$block1 = $block1->setTemplate("catalog/product/list/upsell.phtml");

// kills it
cacheContent($block1->toHTml());

// this helps 
$model->clearInstance();

}

除了在单独的 php 调用中处理每个循环项之外,还有什么想法吗?

最佳答案

您不需要每次都创建新的 block 实例。每次调用 toHtml() 时都会准备好数据,只需创建 $block1 一次并重复使用即可。

这应该删除对不再需要的模型实例的大量引用。

编辑:话虽这么说,您是否遗漏了为 block 注册产品实例的代码?应该是:

$block1 = Mage::app()->getLayout()->createBlock("catalog/product_list_upsell");
$block1 = $block1->setTemplate("catalog/product/list/upsell.phtml");

foreach($products as $productid) {

    $model = Mage::getModel("catalog/product")->load($productid);

    Mage::unregister('product');
    Mage::register('product', $model);

    cacheContent($block1->toHTml());

    $model->clearInstance();

}

关于magento - block toHTML 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542471/

相关文章:

java - magja 与 Magento 1.7 兼容吗

php - 如何将 "Enter Coupon Code"放入侧边栏购物车?

php - Magento SQLSTATE[42S22]

linux - crontab 时区问题。需要在印度标准时间使用 cron 选项卡运行脚本。但服务器时间是MST

perl - 如何为 Perl 脚本设置 crontab 作业

magento - 使 magento 管理字段依赖于多个值或字段?

c# - 如何在 C# 中管理内存泄漏

c++ - 父类析构函数删除具有外部启动元素的子类?

ios - 尽管使用较弱的委托(delegate)保留圈

cron - 脚本 cron 蓝调