Eri*_* J. 17
您可以在分配类之前和之后调用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;
}
Run Code Online (Sandbox Code Playgroud)
在将来的任何时候,您都可以检查allocatedSize以查看该对象在分配时的大小.但是,如果在分配它之后添加它,则allocateSize将不再准确.
Pro*_*f83 12
尝试序列化对象并读取字符串长度是否没有意义?显然它将关闭几个字节,因为序列化字符串将具有s:'string'因此s:''是额外的字节...除非serialize可以与PHP存储对象相同的方式???
所以例如
$size = strlen(serialize($object));
Run Code Online (Sandbox Code Playgroud)
只是一个想法?
另一个混乱但可能准确的想法:
假设一个类实例变量自实例化以来被操作了几次:
$DB; // database access class for eg.
$mem = memory_get_usage();
$DB_tmp = clone $DB;
$mem = memory_get_usage() - $mem;
unset($DB_tmp);
Run Code Online (Sandbox Code Playgroud)
$ mem可能是分配给$ DB的确切内存量;