代码块的峰值内存使用情况?

时间:2013-01-16 14:18:42

标签: php memory benchmarking

是否可以在PHP中获取特定代码块的峰值内存使用量? memory_get_peak_usage()函数似乎在整个进程执行期间达到峰值,直到函数调用,但这不是我想要获得的,因为其他代码块可能会使值偏斜。我试图自己隔离代码块,而不是整个过程。

示例:

// 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目前不适合我。

2 个答案:

答案 0 :(得分:-1)

我不知道这样做的具体功能,但是如果你只是试图隔离一段代码就会做一些简单的事情:

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

答案 1 :(得分:-1)

编辑:XHProf执行此操作,请检查my answer here


请勿使用memory_get_peak_usage()

$alpha = memory_get_usage();

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

$used_memory = memory_get_usage() - $alpha;

请注意,这只会返回// some code所需的最终内存量。中间内存消耗(例如设置/销毁内容或调用函数)将不计算在内。

你可以使用register_tick_function()破解你的方式,但它仍然无法用于函数调用。