2014-03-03 99 views
2

我寫了大量的數據,但在功能內的時間塊處理一些PHP腳本。有點像這樣:是釋放內存當PHP函數結束

function part1(){ 
    $data = getLargeArray(); 
    $evenBigger = array(); 
    foreach($data as $piece){ 
    $evenBigger[$piece['part1']][$piece['part2']][] = ohGodMoreData(); 
    } 

    //...manipulate $evenBigger more and more 

    return true; 
} 

part1(); 

part2(); 
//...etc 

我關心我的函數的內存使用情況。並不是說它們非常麻煩,但我擔心如果記憶沒有被釋放,它可能是。我知道PHP在每個腳本的末尾釋放所有的內存,但我也不想運行4或5個不同的腳本。

當我移動到part2();part1();釋放的內存?

我是否應該手動取消佔用太多空間的變量,如$data$evenBigger,或者相信PHP會在函數結束時爲我執行此操作?

或者:

- 有沒有更好的方法來放棄那段記憶?

-Any的方式來測試這樣的事情?

-Any技巧更好地管理資源?

+1

memory_get_usage()使用它,並且你可以回答你自己的問題 – 2014-03-03 22:14:44

+1

內存不是「釋放」的,但是變量所使用的內存只在函數的範圍內當函數返回或退出時,爲'垃圾收集';'垃圾收集'會在有空閒時鐘週期或兩個時候釋放內存......通常這會很快發生。 –

+1

您可以手動'unset '函數內的變量,但是這隻能使它們可用於'垃圾收集' –

回答

0

PHP不指望你來取消所有的變量。

這裏您的$evenBigger變量有一個局部範圍,除非您將其分配給代碼中某處的某個外部引用,您不需要在執行該函數後處理它。

請注意,我不知道到底PHP的內部行爲,我不能告訴確切時間,這將是垃圾收集。有關的文檔看起來不錯http://www.php.net/manual/en/features.gc.php