在 PHP 中获取对象的内存大小?

2022-08-30 13:11:33

有一种方法可以获得PHP正在使用的总内存(),但是如何获得单个对象的内存大小?memory_get_usage()

我显然不是在谈论,因为我想要一个潜在的复杂数据结构中的字节数。count()


答案 1

您可以在分配类之前和之后调用 memory_get_usage(),如 IBM 的此示例所示。您甚至可以创建一个包装器来执行此操作,可能将结果存储在复杂类本身的成员变量上。

编辑:

要阐明有关存储分配的内存大小的部分,可以执行如下操作:

class MyBigClass
{
    var $allocatedSize;
    var $allMyOtherStuff;
}

function AllocateMyBigClass()
{
    $before = memory_get_usage();
    $ret = new MyBigClass;
    $after = memory_get_usage();
    $ret->allocatedSize = ($after - $before);

    return $ret;
}

在将来的任何时候,您都可以检查 allocatedSize 以查看该对象在分配时的大小。但是,如果在分配后添加它,则 allocatedSize 将不再准确。


答案 2

尝试序列化对象并读取字符串长度是否有意义?显然,它将是几个字节,因为序列化的字符串将具有s:'string'因此s:''是额外的字节...除非序列化可能与 PHP 存储对象的方式相同???

例如

$size = strlen(serialize($object));

只是一个想法?

另一个混乱但可能准确的想法:

假设一个自实例化以来已操作过几次的类实例变量:

$DB; // database access class for eg.
$mem = memory_get_usage();
$DB_tmp = clone $DB;
$mem = memory_get_usage() - $mem;
unset($DB_tmp);

$mem可以是分配给$DB的确切内存量;


推荐