如何在PHP中查找对象使用的内存? (c的大小)。我想要找到的对象是一个字符串,其中包含字符串和整数,因此很难手动计算它。 php中的字符串也可以是不同的长度,具体取决于编码(utf8等)是否正确?
答案 0 :(得分:44)
您可以使用memory_get_usage()。
在创建对象之前运行一次,然后在创建对象后再次运行它,并获取两个结果之间的差异。
答案 1 :(得分:11)
要了解对象大小,请尝试
strlen(serialize($object));
这绝不是准确的,而是一种简单的方法来获得一个数字进行比较。
答案 2 :(得分: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);
?>
这实际上创建了数组结构和的所有成员的副本。
不是100%准确但仍然有效的版本也是:
<?php
$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();
$size = abs($mem - $old);
希望对于已经构建对象的情况有所帮助。
答案 3 :(得分:0)
这个方法可以帮到你:
function getVariableUsage($var) {
$total_memory = memory_get_usage();
$tmp = unserialize(serialize($var));
return memory_get_usage() - $total_memory;
}
$var = "Hey, what's you doing?";
echo getVariableUsage($var);
答案 4 :(得分:0)
此方法将数组转换为 json 字符串并确定该字符串的长度。结果应该与数组的大小非常相似(两者都将有分隔符来分割数组的成员或字符串化的 json)
strlen(json_encode(YourArray))
答案 5 :(得分:-6)
我不知道有一种简单的方法可以在PHP中获取对象的大小。你可能只需做一个
的算法我确信有更好的方法,但这会奏效,即使这会很痛苦。