【问题标题】:php: memory_get_usage(true) doesn't increasephp: memory_get_usage(true) 没有增加
【发布时间】:2012-01-24 10:43:09
【问题描述】:

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

类测试{ 公共函数 __construct() { $start = memory_get_usage(1); runFunctionNeededToCheck(); var_dump(memory_get_usage(1) - $start); } }

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

那么你有什么想法吗?或者你知道为什么记忆似乎会持续存在吗?

提前谢谢

编辑

我尝试了一下,似乎函数不是问题,但是如果你在一个对象中运行这段代码,你就完蛋了……(对不起,我一开始没有提到它)

Doh!-效果

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

【问题讨论】:

  • 我认为问题在于,函数有自己的堆栈,一旦函数完成,这个堆栈就会被清除 - 所以内存使用量将与以前相同或几乎相同。
  • 谢谢你的小费。我尝试了一下,似乎函数不是问题,但是如果你在一个对象中运行这段代码,你就完蛋了……

标签: php memory


【解决方案1】:

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

尝试将相同的行放在函数本身中,这可能会对问题有所了解。

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

    //do something here....//

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

当然,内存使用量是否有任何差异完全取决于函数的作用——为了确保它使用更多内存,请尝试打开一个图像文件或其他东西,这样你就知道使用量会超过之前。

【讨论】:

    【解决方案2】:

    嗯,它可以工作了:

    <?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)
    }
    

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

    【讨论】:

    • 是的......好吧 - 这是合乎逻辑的......所有本地变量都在函数结束时被清除。谢谢!
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多