2013-01-16 101 views
3

是否有可能在PHP中獲得特定代碼塊的峯值內存使用量?函數似乎在整個過程執行過程中達到了高峯,直到函數調用的這一點,但這不是我想要獲得的,因爲其他代碼塊可能會偏離該值。我試圖自己隔離代碼塊,而不是整個過程。代碼塊的峯值內存使用情況?

例子:

// Block 1 
for ($i = 0; $i < $iterations; ++$i) { 
    // some code 
} 

// Block 2 
for ($i = 0; $i < $iterations; ++$i) { 
    // some different code 
} 

// Determine which of the two blocks used the most memory during their execution here 

不幸的是,Xdebug的是不會在這個時候我的選擇。

回答

-1

我不知道,這是否一個特定的功能,但如果你只是試圖隔離的代碼塊做一些其它事情就這麼簡單:

$before = memory_get_peak_usage(); 
for ($i = 0; $i < $iterations; ++$i) { 
    // some code 
} 
$after = memory_get_peak_usage(); 
$used_memory = $after - $before; 
+0

我在我的問題中解釋了爲什麼這不起作用。 – FtDRbwLXw6

+0

只要使用一次就可以讓您在整個代碼中達到頂點。 但是,在變量之前和之後都有一個變量,會減少該函數的峯值內存使用量。 –

+1

由於我在我的問題中列出的原因,這不會以您認爲的方式工作。因爲'memory_get_peak_usage()'維持一個運行*最大值*,所以如果你所包裝的代碼塊使用的是*最小值*,那麼後面的調用仍然會顯示最大值,而'$ used_memory'將會是0. – FtDRbwLXw6

-1

編輯:XHProf的這樣做,檢查my answer here 。記住

$alpha = memory_get_usage(); 

for ($i = 0; $i < $iterations; ++$i) { 
    // some code 
} 

$used_memory = memory_get_usage() - $alpha; 

裸,這將只返回所需內存的// some code最後量:


不要使用memory_get_peak_usage()。中級內存消耗(如設置/銷燬東西或調用函數)將不計數。

你可以使用register_tick_function()破解你的方式,但它仍然不能用於函數調用。

+0

你爲你的答案,但我在標題和問題中指出,我在代碼塊的* peak *內存使用之後。 – FtDRbwLXw6

+0

@drrcknlsn:我在做同樣的事情(http://stackoverflow.com/q/16511611/89771),但我認爲它沒有什麼好處。無論如何,就像我在我的回答中所說的那樣,如果您不關心塊中的外部函數調用,您仍然可以使用'register_tick_function()'獲得峯值內存使用量。 –

+0

@drrcknlsn:用鏈接更新它。 –