0

我使用codeigniter和PHP來構建一個web應用程序,並且由於需要執行大量查詢,我必須定義/使用很多對象。 有時我必須使用同一個對象多次循環中,例如:取消codeigniter對象或一般的PHP?

$dbData = $this->mydb->query($dbQuery); 
    if($dbData->num_rows() >0){ //check if rows were returned 
    $dbResult = $dbData->result(); 
    foreach($dbResult as $index => $row){ 
     $dbArray[$row->JOB_NAME_STG] = $row->REC_LOADED; 
    } 

在一般的編程實踐中,你應該廢止的對象,一旦他們不再需要的,但我一直沒能找到任何細節在確保所有對象都無效的最佳方法中避免了一般的codeigniter或php的內存泄漏。

將NULL分配給函數末尾的對象是否足夠?

$dbData = $this->mydb->query($dbQuery); 
$dbData = NULL; 

或者codeigniter有更有效的方法確保沒有內存泄漏。

在使用之前應該將對象在循環內置空以確保沒有內存泄漏?

任何指針的方向將不勝感激。 謝謝!

+2

「在一般的編程習慣中,一旦不再需要它們,就應該使對象無效」---誰告訴過你的?這不是真的。 – zerkms

+0

我從未使任何對象無效。我不認爲我們應該這樣做 –

+0

我認爲你不應該取消指向對象的指針......你應該取消它們。如果你使指針無效,那麼指針現在指向值NULL並且失去對原始存儲器的引用...因此強制垃圾收集將其排除!至少,你可以這樣做:'unset($ dbData); $ dbData = NULL;'按此順序。 – Jimmyt1988

回答

0

分配null使得沒有任何意義:

  1. PHP> = 5.3
  2. 應用程序,不用於小時
工作

你符合上述兩個項目?

+0

我在PHP版本5.3.10和我的腳本運行分鐘10-20分鐘..不是小時,雖然 – Neel

+0

@ user1017268:所以 - 它沒有意義 – zerkms

+0

你能告訴我一些細節,爲什麼是NULL不需要在PHP> = 5.3 ?? – Neel

0

unset()應該從內存中釋放變量或對象。但是,PHP沒有很好的垃圾收集。他們正試圖通過5.3的新型圓形垃圾收集來改善它,但它仍然存在挑戰。