我有一個遞歸函數,給定一個id,建立一個目錄路徑。 問題是,它沒有釋放空間,因此從1761文件夾後15MB的內存消耗開始,內存消耗約爲150MB,這是不健康的。PHP:內存泄漏遞歸函數
這是功能:
private function buildDirectoryPath($iId, $sDir = "")
{
$oFolder = Folders::getFolder($iId);
if (!empty($sDir)) $sDir = $oFolder->getName() . "/" . $sDir;
else $sDir = $oFolder->getName(). $sDir;
if ($oFolder->getParentId() > 0)
$sDir = $this->buildDirectoryPath($oFolder->getParentId(), $sDir);
return $sDir;
}
,這是我如何稱呼它(文件夾的內循環):
foreach ($aFolders as $aFolder) {
$sFolderPath = $this->buildDirectoryPath($aFolder["fol_id"]);
}
所以說實話,我沒有寫很多遞歸函數,所以我願意接受任何調整
編輯,添加文件夾::的GetFolder靜態方法:
static public function getFolders($sAppCode,
$iParentId = 0)
{
$oDb = Zend_Registry::get('db');
$oSelect = $oDb
->select()
->from('folders')
->where('folders.fol_deleted_user_id = 0')
->order('folders.fol_name ASC');
if ($iParentId >= 0) {
$oSelect->where('folders.fol_parent_id = ' . (int)$iParentId);
}
$aFolders = $oDb->fetchAll($oSelect);
//added the $object = null later
$oDb = null;
$oSelect = null;
$oAppSelector = null;
return $aFolders;
}
edit2:如果我找不到一個簡單的解決方案,我的計劃b將緩存路徑,所以我不需要建立他們的一切。它只是我必須改變應用程序內的很多代碼
如果您未設置($ oFolder),它會有幫助嗎?返回之前? –
多數民衆贊成說,我已經嘗試過,不幸的是它不起作用 –
然後它看起來像你的泄漏是在你的'文件夾'類 –