Очень долго выполняется return и странный скачок в расхода памяти.

Labutin

Новичок
Очень долго выполняется return и странный скачок в расхода памяти.

PHP Version 5.1.6

В классе есть метод:
function apply(xbtree &$xb)
Этот метод вызывается из метода service класса xbtree
$this->currentTemplate->apply($this);
В данном случае $this занимает немало памяти и передается он по ссылке. Но что странно. По засечкам использования памяти: memory_get_usage() наблюдается следующая картина (это конкретный пример сборки одной из страниц):
перед $this->currentTemplate->apply($this); памяти расходуется: 5.962.704
сразу после входа в функцию function apply(xbtree &$xb) : 8.329.360
Не понимаю, откуда набежало сразу 2.5 метра? Ведь передача должна проходить по ссылке!!!

Это странно, но тормоза немного в другом месте.

При выходе из функции function apply(xbtree &$xb) имеем оператор:
return $res;
Я поставил засечки времени перед return и сразу после кода, вызывающего эту функцию.
Схематично это выглядит так:

function f()
{
...
засечка_1;
return $res;
}

...
f(); // вызов функции
засечка_2;

Так вот: засечка_2 - засечка_1 может быть как доли секунд, так и больше 20 секунд!!! И ВСЕГДА именно этот кусок составляет 80-95% всего времени сбора страницы.
Посмотрел размер $res, который возвращается из функции - это в максимуме 100 килобайт.

Так что имеем две странности:
- Почему при передаче по ссылке съедается много памяти?
- Почему return иногда работает непростительно долго?

Подскажите, в чем могут быть причины данных странностей?

P.S. PHP Version 5.1.6
 
Сверху