Как статически инициализировать двумерный список?

У вас есть (по крайней мере) два решения:

Точно «наивный» использует microtime (true) до и после части кода, чтобы узнать, сколько время прошло во время его исполнения; другие ответы сказали, что уже дали примеры, поэтому я больше не буду говорить.

Это хорошее решение, если вы хотите сравнить пару инструкций, например сравнить два типа функций, например - - Лучше, если делать тысячи раз, чтобы убедиться, что какой-либо «возмущающий элемент» усреднен.

Что-то вроде этого, поэтому, если вы хотите знать, сколько времени потребуется для сериализации массива:

$before = microtime(true);

for ($i=0 ; $i<100000 ; $i++) {
    serialize($list);
}

$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";

Не идеально, но полезно, и не требуется много времени для настройки.


Другое решение, которое работает довольно хорошо если вы хотите определить, какая функция занимает много времени во всем скрипте, следует использовать:

  • Расширение Xdebug для генерации профилирующих данных для скрипта
  • Программное обеспечение, которое считывает данные профилирования и представляет вам что-то читаемое. Я знаю три из них: Webgrind ; веб-интерфейс, должен работать на любом сервере Apache + PHP WinCacheGrind , только на окнах KCacheGrind ; возможно, onl y Linux и linux-like; Это то, что я предпочитаю, btw

Чтобы получить профилирующие файлы, вам нужно установить и настроить Xdebug; взгляните на страницу Profiling PHP Scripts документации.

То, что я обычно делаю, не включает профилировщик по умолчанию (он генерирует довольно большие файлы и замедляет работу вниз) , но используйте возможность отправки параметра с именем XDEBUG_PROFILE как данные GET, чтобы активировать профилирование только для необходимой мне страницы. Связанная с профилированием часть моего php.ini выглядит следующим образом:

xdebug.profiler_enable = 0              ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1      ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names

(Прочитайте документацию для получения дополнительной информации)

Этот снимок экрана с программа C ++ в KcacheGrind: http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif Вы будете получить то же самое с PHP-скриптами ;-) (С KCacheGrind, я имею в виду: WinCacheGrind не так хорош, как KCacheGrind ...)

Это позволяет вам получить хороший взгляд на то, что требует времени в вашем приложении, - и иногда он определенно помогает найти функцию, которая замедляет все. ^^

Обратите внимание, что Xdebug подсчитывает время процессора, затрачиваемое PHP; когда PHP ожидает ответа от базы данных (например), он не работает; только ожидание. Поэтому Xdebug подумает, что запрос БД не займет много времени! Это должно быть профилировано на сервере SQL, а не на PHP, поэтому ...

Надеюсь, что это полезно :-) Удачи!

17
задан cody 3 June 2011 в 21:45
поделиться