在 PHP 中获取对象的内存大小?
有一种方法可以获得PHP正在使用的总内存(),但是如何获得单个对象的内存大小?memory_get_usage()
我显然不是在谈论,因为我想要一个潜在的复杂数据结构中的字节数。count()
有一种方法可以获得PHP正在使用的总内存(),但是如何获得单个对象的内存大小?memory_get_usage()
我显然不是在谈论,因为我想要一个潜在的复杂数据结构中的字节数。count()
您可以在分配类之前和之后调用 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 将不再准确。
尝试序列化对象并读取字符串长度是否有意义?显然,它将是几个字节,因为序列化的字符串将具有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的确切内存量;