2011-12-20 78 views
1

有一個奇怪的問題。我想查一個函數的內存使用量和使用 php:memory_get_usage(true)不會增加

 
    class test { 
     public function __construct() { 
     $start = memory_get_usage(1); 
     runFunctionNeededToCheck(); 
     var_dump(memory_get_usage(1) - $start); 
     } 
    } 

,但它只是返回0,內存使用不會增加,而我在這個功能幾十數組,對象和一些分貝交易的創建。如果沒有real_usage標誌,我會得到一些大於0的估值,但是我需要這些腳本/函數的內存使用情況。

那麼你有什麼想法嗎?或者你知道爲什麼記憶似乎持續下去嗎?

提前THX

編輯

我嘗試了一下,似乎功能是沒有問題的,但如果你的對象中運行這些代碼,你來我到底...(遺憾的是,我並沒有在第一次提到它)

衛生署! - 效應

所有本地變量都在函數結束時清零。謝謝!

+0

我認爲問題是,函數有自己的堆棧,一旦函數完成,這個堆棧就會被清除 - 所以內存的使用情況將與之前相同或幾乎相同。 –

+0

Thx爲您的提示。我試了一下,似乎函數不是問題,但如果你在一個對象內部運行這個代碼,你會達到我的目的...... – Hazer666

+0

這可能會幫助你更多:http://uk3.php.net/manual/ en/function.memory-get-peak-usage.php – jammypeach

回答

0

據我所知,調用var_dump()命令後,你調用的函數會自行清除。

嘗試在功能本身內部放置相同的線條,這可能會對此問題有所瞭解。

function runFunctionNeededToCheck() 
{ 
    $start = memory_get_usage(1); 

    //do something here....// 

    return (memory_get_usage(1) - $start); 
} 
$memUsage = runFunctionNeededToCheck(); 
echo $memUsage; 

當然,無論是否存在內存使用任何區別,完全取決於功能是什麼 - 以確保它正在使用更多的內存,嘗試打開圖像文件或東西,所以你知道使用率將比以前更多。

0

嗯它煤層工作:

<?php 
class test { 

    public function __construct() { 
     $start = memory_get_usage(1); 
     range(1, 100000); 
     var_dump(array('start' => $start, 'end' => memory_get_usage(1), 'sub' => memory_get_usage(1) - $start)); 
    } 
} 

$v = new test(); 

結果:

array(3) { 
    ["start"]=> 
    int(786432) 
    ["end"]=> 
    int(1048576) 
    ["sub"]=> 
    int(262144) 
} 

莫比你的功能不產生任何新的變量或明確到底呢?

+0

是的......好的 - 這是合乎邏輯的...所有本地變量在函數結束時被清除。謝謝! – Hazer666