ero*_*ppa 30 php memory memory-management
如何在PHP中查找对象使用的内存?(c的大小).我想要找到的对象是一个字符串,其中包含字符串和整数,因此很难手动计算它.php中的字符串也可以是不同的长度,具体取决于编码(utf8等)是否正确?
zom*_*bat 45
你可以使用memory_get_usage().
在创建对象之前运行一次,然后在创建对象后再次运行它,并获取两个结果之间的差异.
小智 12
要了解对象大小,请尝试
strlen(serialize($object));
Run Code Online (Sandbox Code Playgroud)
这绝不是准确的,而是一种简单的方法来获得一个数字进行比较.
小智 8
如果您需要知道已创建的对象或数组的大小,可以使用以下代码来查找它.
<?php
function rec_copy($src) {
if (is_string($src)) {
return str_replace('SOME_NEVER_OCCURING_VALUE_145645645734534523', 'XYZ', $src);
}
if (is_numeric($src)) {
return ($src + 0);
}
if (is_bool($src)) {
return ($src?TRUE:FALSE);
}
if (is_null($src)) {
return NULL;
}
if (is_object($src)) {
$new = (object) array();
foreach ($src as $key => $val) {
$new->$key = rec_copy($val);
}
return $new;
}
if (!is_array($src)) {
print_r(gettype($src) . "\n");
return $src;
}
$new = array();
foreach ($src as $key => $val) {
$new[$key] = rec_copy($val);
}
return $new;
}
$old = memory_get_usage();
$dummy = rec_copy($src);
$mem = memory_get_usage();
$size = abs($mem - $old);
?>
Run Code Online (Sandbox Code Playgroud)
这实际上创建了数组结构及其所有成员的副本.
一个不是100%准确但仍在工作的版本也是:
<?php
$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();
$size = abs($mem - $old);
Run Code Online (Sandbox Code Playgroud)
希望有助于对象已经构建的情况.