Как найти память, используемую объектом в PHP? (размер)

Как найти память, используемую объектом в PHP? (c's sizeof). Объект, о котором я хочу узнать, это словарь со строками и ints, поэтому его сложно вычислить вручную. Также строка в php может иметь разную длину в зависимости от кодировки (utf8 и т. Д.) Правильно?

Related of "Как найти память, используемую объектом в PHP? (размер)"

Вы можете использовать memory_get_usage () .

Запустите его один раз перед созданием вашего объекта, затем снова после создания объекта и получите разницу между двумя результатами.

Чтобы получить представление о размере объектов, попробуйте

 strlen(serialize($object)); 

Это отнюдь не точный, но простой способ получить число для сравнения.

Если вам нужно знать размер уже созданного объекта или массива, вы можете использовать следующий код, чтобы узнать его.

 <?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); 

Надеюсь, что это поможет в случаях, когда объект уже построен.

Я не знаю, что есть простой способ получить размер объекта в PHP. Возможно, вам просто нужно выполнить алгоритм, который

  1. Подсчитывает ints
  2. Умножает количество ints по размеру int на жестком диске
  3. Преобразование символов в строки в ASCII и
  4. Умножьте значения ASCII на сколько они занимают на диске

Я уверен, что есть лучший способ, но это сработает, хотя это будет боль.