有没有办法以字节为单位获得PHP变量的大小?

时间:2010-11-03 10:06:19

标签: php memory variables memory-management

我目前有一个广泛使用Zend Framework的PHP CLI脚本,它似乎在运行时使用了更大量的内存。它循环遍历从数据库中检索的大量模型,批量为1000.调用memory_get_usage()表示脚本的内存使用量总是在增加。

尽管我确保在每次迭代后都没有设置模型,并且实际上使用array_shift()来减少每次迭代时模型数组的大小。

我的问题是,在PHP中是否有一种方法可以发现变量的内存大小,以便跟踪正在增长的内容?

4 个答案:

答案 0 :(得分:4)

我没有检查每个变量大小的解决方案,但是如果你使用doctrine可能是原因

你需要使用

   $Elem->free(true);

另一件事是升级到5.3(如果你还没有这样做),5.3的garbage collector更好

答案 1 :(得分:3)

没有。您可能正在寻找未释放的内存,例如您取消链接变量或删除了引用,garbage collector尚未在内存中释放关联的块。

您可以尝试使用Zend Server 5(您需要商业版)来记录您的应用程序。它有code tracing。我不知道这是否会让你发现内存泄漏。

另见:

答案 2 :(得分:0)

我不知道它有多准确,但我使用apc_add('variable_name', $var);获得了一个数字。然后我转到用户缓存条目下的apc.php并查看大小列。

当然,要实现此功能,您需要安装并运行APC。 : - )

答案 3 :(得分:-2)

以下是我在weberdev

找到的代码段
<?php
function array_size($a){
    $size = 0;
    while(list($k, $v) = each($a)){
        $size += is_array($v) ? array_size($v) : strlen($v);
    }
    return $size;
}
?>

它以字节为单位获取给定数组的大小。这是你的意思吗?

相关问题