Измерение времени выполнения любого куска кода в PHP, получение отрицательного результата - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь профилировать некоторый фрагмент кода php, вычисляя время в микросекундах, которое требуется для его выполнения.Я создал функцию профилировщика, которая принимает другую функцию в качестве параметра, подобного этому

function profiler($funct) 
{
    $raw_start_time = microtime();
    $funct();
    $raw_end_time = microtime();

    $start_time = 1000000 * (double) explode(" ", $raw_start_time)[0];
    $end_time = 1000000 * (double) explode(" ", $raw_end_time)[0];

    return $end_time - $start_time;
}

Я использую свою функцию profiler() следующим образом:

$duration = profiler(function() {
                //code i want to profile
            });

echo $duration;

Функция работает правильно большинство раз и возвращаетправильная продолжительность выполнения.Тем не менее, я получаю отрицательные значения в некоторых тестовых случаях.В чем может быть проблема?

1 Ответ

0 голосов
/ 29 сентября 2019

microtime ([ bool $get_as_float = FALSE ] ) : mixed попробуйте установить значение TRUE

С моей точки зрения, следующее событие.Вы получаете результат в форме "мсек сек" и используете только мсек.Время выполнения более ~ 500 мсек.Результат отрицательный

Если вы не хотите использовать float, используйте следующий подход

$start_time = explode(" ", $raw_start_time)[1] * 1000 + explode(" ", $raw_start_time)[0];

и то же самое с end_time.

Если microtime(FALSE) вы НЕ получите микросекунд.Только миллис.Micros woth TRUE

...