Zend Framework 2递归查询导致内存泄漏

时间:2014-04-08 10:02:13

标签: postgresql zend-framework recursion memory-leaks zend-framework2

我的ZF2应用程序,为了检索一些信息,递归调用一个查询Postgresql数据库的函数。这种递归调用有时会导致脚本内存不足。 在递归调用之前和之后我运行了memory_get_usage()函数,我注意到在数据库递归查询之后,脚本使用的内存增加了。

我想知道导致内存增加的原因是什么,我该怎么做才能减少和/或避免这种内存分配。

这是流程的流程:

public function getInfoAction()
{
    // this call returns about 8000 items
    $items = $this->getServiceLocator->get("Application/Model/ItemsTable")->getItems();
    foreach($items as $item)
    {
        $memory = memory_get_usage();
        $item->recursiveGetInfo();
        $memory = memory_get_usage();
    }
}

这是 recursiveGetInfo 函数:

function recursiveGetInfo()
{
    if(isset($this->info))
        return $this->info;

    if(!$this->isSingleItems())
        $this->info = $this->getServiceLocator()->get("Application/Model/InfoTable")->fetchRow($this->code);
    else
    {
        foreach($this->getSingleItems() as $items)
        {
            $this->info = $items->recursiveGetInfo();
        }
    }
    return $this->info;
}

这是 InfoTable 类的 fetchRow 函数:

public function fetchRow($code)
{
$resultSet = $this->tableGateway->select(array('code' => $code));
    return $resultSet->current();
}

0 个答案:

没有答案