php:memory_get_usage(true)不会增加

时间:2011-12-20 13:09:12

标签: php memory

有一个奇怪的问题。我想检查函数的内存使用情况并使用     

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

但是它只返回0,内存使用量没有增加,而我在这个函数中创建了几十个数组,对象和一些数据库事务。没有real_usage标志,我得到了一些大于0的估值,但我需要这个脚本/函数的内存使用。

你有什么想法吗?或者你知道为什么记忆似乎仍然存在吗?

事先提前

修改

我尝试了一下,似乎功能不是问题,但如果你在一个对象中运行这个代码,你就到了我的终点......(抱歉我一开始没有提到它)

培乐多! - 效应

在函数结束时清除所有本地变量。谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,在调用var_dump()命令之前,您调用的函数将自行清除。

尝试在函数内部放置相同的行,这可能会对此事有所启发。

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

    //do something here....//

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

当然,内存使用量是否有任何差异完全取决于函数的作用 - 确保它使用更多内存,尝试打开图像文件或其他内容,以便您知道用法将超过之前。

答案 1 :(得分: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)
}

也许你的函数最终没有创建任何新变量或清除它们?