Деструктор класса PHP работает медленно при уничтожении объектов, ссылающихся друг на друга - PullRequest
0 голосов
/ 04 июля 2019

Я реализовал создание структуры данных узлов.Каждый узел может получить свой дочерний узел или родительский узел.

Я попытался протестировать структуру данных на своем веб-сервере и обнаружил, что ее производительность ужасна.

ниже приведен пример кода.

class Node
{
    public $next = null;
    public $parent = null;

    public function __construct($name) 
    {
        $this->name = $name;
    }

    public function __destruct()
    {
        static $i = 0;
        print_r(++$i.':'.$this->name.' '.date('H:i:s')."\n");

        $this->next = null;
        $this->parent = null;
    }
};

$root = new Node('root');
$curNode = $root;
$count = 10;
while (--$count) {
    $curNode->next = new Node('node'.$count);
    $curNode->next->parent = $curNode;
    $curNode = $curNode->next;
}
print_r("end\n");
return;

Я запустил его через веб-сервер и получил следующий результат:

end
1:root 17:32:46
2:node9 17:32:46
3:node8 17:32:46
4:node7 17:32:46
5:node6 17:32:47
6:node5 17:32:47
7:node4 17:32:47
8:node3 17:32:47
9:node2 17:32:47
10:node1 17:32:48

Потребовалось почти 2 секунды, чтобы уничтожить десять узлов.Я не могу выяснить причину.Я выполнил тот же код через cli, и он немедленно завершился.

Мой хост работает под управлением Apache / 2.4.29 и использует PHP 7.3.6.Как я могу это исправить?Спасибо.

...