Есть ли способ получить размер переменной PHP в байтах?

В настоящее время я использую PHP CLI script с помощью Zend Framework, который, как кажется, использует все больший объем памяти. Он перемещается по большому набору моделей, полученных из базы данных партиями 1000. Вызовы memory_get_usage() показывают, что использование памяти script всегда увеличивается.

Это несмотря на то, что я отключил модель после каждой итерации и фактически использовал array_shift(), чтобы уменьшить размер массива моделей на каждой итерации.

Мой вопрос в том, что в PHP есть способ обнаружить размер в памяти переменной, чтобы я мог отслеживать, что растет?

Ответы

Ответ 1

У меня нет решения для проверки размера каждой переменной, но если вы используете doctrine, это, вероятно, причина

вам нужно использовать

   $Elem->free(true);

еще одна вещь - обновить до 5.3 (если вы еще этого не сделаете), лучше= "http://php.net/manual/en/features.gc.performance-considerations.php" rel= "nofollow" > сборщик мусора 5.3.

Ответ 2

Нет. Вероятно, вы ищете память, которая не освобождена, например. вы отсоединили переменную или удалили ссылку, а сборщик мусора еще не выпустили связанный блок в памяти.

Вы можете попробовать Zend Server 5 (вам нужна коммерческая версия) для mem-profile вашего приложения. Он отслеживание кода. Я не знаю, позволит ли это вам обнаружить утечки памяти.

Также смотрите:

Ответ 3

Я не знаю, насколько это точно, но я получил номер, используя apc_add('variable_name', $var);. Затем я перехожу к apc.php в записи пользовательского кэша и просматриваю столбец размера.

Конечно, для этого вам необходимо установить и запустить APC.: -)

Ответ 4

Вот фрагмент кода, который я нашел в weberdev

<?php
function array_size($a){
    $size = 0;
    while(list($k, $v) = each($a)){
        $size += is_array($v) ? array_size($v) : strlen($v);
    }
    return $size;
}
?>

Он получает размер данного массива в байтах. Это то, что вы имели в виду?