Получение размера в память об объекте в PHP?

try
{
...some code...
}
catch
{
// Just don't crash, it wasn't that important anyway.
}

*sigh

32
задан hakre 10 December 2012 в 16:29
поделиться

2 ответа

Вы можете вызвать memory_get_usage () до и после выделения вашего класса, как показано в в этом примере от IBM . Вы даже можете создать оболочку для этого, возможно, сохраняя результат в переменной-члене самого сложного класса.

EDIT:

Чтобы прояснить часть, касающуюся хранения размера выделенной памяти, вы можете сделать что-то вроде этого:

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, чтобы узнать, насколько велик этот объект во время выделения. Однако, если вы добавите к нему после выделения, значение selectedSize больше не будет точным.

17
ответ дан 27 November 2019 в 21:12
поделиться

Я не думаю, что это вполне возможно; Я никогда не видел ничего, что позволяло бы получить размер объекта в памяти.

Решение для получения довольно приблизительного представления могло бы заключаться в сериализации ваших данных и использовании strlen для этого ... Но это действительно будет чем-то вроде оценки ... Я бы не стал полностью полагаться на что-либо подобное, на самом деле ...


Даже debug_zval_dump этого не делает: он выводит данные в переменную и счетчик ссылок, но не используемая память:

$obj = new stdClass();
$obj->a = 152;
$obj->b = 'test';

echo '<pre>';
debug_zval_dump($obj);
echo '</pre>';

даст вам только:

object(stdClass)#1 (2) refcount(2){
  ["a"]=>
  long(152) refcount(1)
  ["b"]=>
  string(4) "test" refcount(1)
}
3
ответ дан 27 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: