Тестирование PHP — встроенная функция min () кажется очень медленной

У меня есть следующая тестовая среда для php:

class Test {
public $counter;

public static $timer = null;
public static $instances = 0;

public function __construct() {
$this->counter++;

if (self::$instances == 0) {
self::$timer = microtime(true);
}

self::$instances++;
if (self::$instances % 1000 === 0) {
echo "Duration of 1000 builds: " . (microtime(true) - self::$timer) . " secs ( " . self::$instances . " )\n";
self::$timer = microtime(true);
}
}

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

$Test = new Test();
$array = array();
for ($i=0; $i<5000; $i++) {
$array[$i] = clone $Test;


for ($z=0; $z<1000; $z++) {
//$counter = max(0, $i-$z);
$counter = $i-$z;
if ($counter < 0) $counter = 0;
$get = $array[$counter]->counter;
}
}

Если я запускаю этот скрипт как есть, я получаю следующий вывод:

Продолжительность 1000 билдов: 0,12318682670593 сек (1000)
Длительность 1000 сборок: 0,12733101844788 с (2000).
Длительность 1000 сборок: 0,12077212333679 с (3000)
Продолжительность 1000 билдов: 0,12160491943359 секунд (4000)
Продолжительность 1000 билдов: 0.12030696868896 секунд (5000)

Тем не менее, если я удалю комментарии из строки $counter = max(0, $i-$z); и вместо того, чтобы закомментировать следующие две строки, которые одинаково должны делать то же самое, я получаю эти результаты:

Длительность 1000 сборок: 0,3405590057373 с (1000)
Длительность 1000 сборок: 0,33710408210754 с (2000)
Длительность 1000 сборок: 0,3317539691925 с (3000)
Длительность 1000 сборок: 0,34044504165649 с (4000).
Продолжительность 1000 построений: 0,33882308006287 секунд (5000)

Используя встроенный PHP max функция, занимает примерно в 3 раза больше, затем вычисление максимального значения вручную. Странно, если я перенесу это на более простой пример, без клонирования классов и построения классов, времена будут равны.

Может ли кто-нибудь объяснить, почему PHP встроен max работать здесь намного медленнее?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector