PHP - использование microtime () для измерения использования ЦП блока функции / кода - PullRequest
1 голос
/ 25 января 2011

Я пытался использовать это так:

$now = microtime(true); 
// cpu expensive code here
echo microtime(true) - $now;   

, но независимо от того, какой код я ввожу между этими утверждениями, я всегда получаю почти одинаковые результаты, что-то вроде 3.0994415283203E-6

Чтоя делаю не так?

Ответы [ 5 ]

6 голосов
/ 25 января 2011

Лучшее решение. Выполните код несколько раз, чтобы усреднить операцию:

$runs = 500;

$start = microtime(true);
for ($i = 0; $i < $runs; $i++) {
    //cpu expensive code here
}
$end = microtime(true);
$elapsed = number_format($end - $start, 4);
$one = number_format(($end - $start) / 500, 7);
echo "500 runs in $elapsed seconds, average of $one seconds per call";
3 голосов
/ 25 января 2011

3.0994415283203E-6 соответствует 0.0000030994415283203.

E-6 говорит вам переместить десятичную точку влево на шесть позиций.E+6 будет означать обратное.Как упоминалось в @deceze, это называется научной нотацией.

Если вы выполняете тест производительности, неплохо было бы поместить код в итерационный цикл или около того, а затем разделить полученное время на 100000Таким образом, вы получите более точное среднее значение.

1 голос
/ 25 января 2011

Похоже, вы используете microtime() без необязательного аргумента, но вы говорите, что да, поэтому я не уверен на 100%.

Каков вывод этого:

$now = microtime(true);
sleep(1);
echo microtime(true) - $now;
1 голос
/ 25 января 2011

Вы не делаете ничего плохого, просто код, который вы синхронизируете, на самом деле занимает всего лишь доли секунды для запуска.

Если вы хотите доказать это, sleep в течение нескольких секунд.

0 голосов
/ 25 января 2011

PHP всегда поражает меня своей скоростью. Ваш код кажется правильным. Возможно, ваш код действительно занимает всего 3 миллисекунды.

Вы можете попробовать сделать длинный цикл, примерно так:

$x=0;
while ($x<1000000)
  {
  $x++;
  }

Добавьте этот код в свой таймер. Для меня цикл 1 миллион раз обычно занимает около 1/2 секунды. Посмотрите, изменит ли это ваше время.

...