我的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();
}