try
{
...some code...
}
catch
{
// Just don't crash, it wasn't that important anyway.
}
*sigh
Вы можете вызвать 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 больше не будет точным.
Я не думаю, что это вполне возможно; Я никогда не видел ничего, что позволяло бы получить размер объекта в памяти.
Решение для получения довольно приблизительного представления могло бы заключаться в сериализации ваших данных и использовании 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)
}