内存泄漏与块toHTML

时间:2013-01-26 23:01:57

标签: magento memory-leaks cron magento-1.7

我对所有产品(在cron内)做一个简单的循环来生成一个块并缓存结果,

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

我可以减少getModel加载的效果,但是HTML会杀死它

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调用中处理每个循环项目?

1 个答案:

答案 0 :(得分:2)

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

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

编辑:话虽如此,您是否遗漏了为块注册产品实例的代码?它应该是:

$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();

}