2011-12-10 24 views
5

我開發一個PHP腳本,循環/迭代多於10000次:爲什麼迭代超過10,000次的foreach循環內存不足?

foreach ($array_with_items as $item) { 

    // Instantiate the object 
    $obj_car = new CarAds($puk, 'ENG', '5'); 

    $obj_car->detail1 = "Info about detail1"; 
    $obj_car->detail2 = "Info about detail2"; 
    $obj_car->detail3 = "Info about detail3"; 
    $obj_car->detail4 = "Info about detail4"; 

    // Saves to the database 
    $obk_car->save; 
} 

當我運行這段代碼在我的機器耗盡內存。我能做些什麼來清理這個foreach循環中的內存?

+0

你寫的' $ obj_car'和一次'$ obk_car',這是打算嗎? – Alex

+0

您正在每次迭代中創建一個CarAds實例。 – jap1968

回答

8

您將實例化爲CarAds對象作爲您的$ array_with_items項數。每個人分配內存。

的save()方法後,你應該釋放的對象與未設置()函數:

// Saves to the database 
$obj_car->save; 

// Unset unneeded object 
unset($obj_car); 

您可以使用memory_get_usage檢查你的內存消耗()(見http://php.net/manual/en/function.memory-get-usage.php

5

在循環結束時嘗試unset($obk_car)

2

unsetforeach循環結束對象

unset($obj_car); 

如果您還需要爲您的腳本更多的內存,你可以在這條線增加你php.inilimit

memory_limit = 128M 

編輯:

  • 如果您使用PHP> = 5.3.0,則可以通過調用gc_collect_cycles
  • 強制執行垃圾收集如果您使用PHP> = 5.2,則來自IBM的this article是一個有趣的讀取。
+1

您也可以刪除任何內存限制,將參數設置爲-1 – spider

+0

請添加註釋,解釋downvote。 – Nasreddine

+0

對不起,我對+1和-1做了一些混淆,然後再次+1。 Ajax腳本失去了最後的+1。我把它放回去了。抱歉的錯誤。 – spider

相關問題