Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Измерение памяти и времени в PHP [2]
Форумы портала PHP.SU » PHP » Пользовательские функции » Измерение памяти и времени в PHP

Страниц (2): « 1 [2]
 

16. EuGen - 15 Ноября, 2013 - 18:06:18 - перейти к сообщению
Hapson пишет:
http://clip2net[dot]com/s/6blBgF

Даже на Вашем примере видно, что память (поле Memory) измеряется некорректно. Она не может составлять менее 4*10.000 байт, Ваш же результат - 0.18Kb (=180 байт). И это понятно, почему - см. второй пункт в моём предыдущем сообщении.
Насчёт максимальной памяти - см. третий пункт, почему нельзя использовать memory_get_peak_usage() для определения этого (а так же код в моём примере)
17. Hapson - 15 Ноября, 2013 - 18:13:45 - перейти к сообщению
EuGen пишет:
Hapson пишет:
http://clip2net[dot]com/s/6blBgF

Даже на Вашем примере видно, что память (поле Memory) измеряется некорректно. Она не может составлять менее 4*10.000 байт, Ваш же результат - 0.18Kb (=180 байт). И это понятно, почему - см. второй пункт в моём предыдущем сообщении.
Насчёт максимальной памяти - см. третий пункт, почему нельзя использовать memory_get_peak_usage() для определения этого (а так же код в моём примере)

То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты? Ну со временем проще, если мерить загрузку сайта в целом, то от истины недалеко.
А как тогда быть с памятью, если нужно измерить потребление целого скрипта? Измерить потребление памяти сайтом.
18. EuGen - 15 Ноября, 2013 - 18:20:49 - перейти к сообщению
Hapson пишет:
То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты?

Не понял, о чём Вы
Hapson пишет:
А как тогда быть с памятью, если нужно измерить потребление целого скрипта

Для измерения памяти, которая была потреблена всем скриптом, целиком - вполне подойдёт memory_get_peak_usage(). Для измерения того, сколько памяти потребила конкретная функция - нет. Подумайте, зачем это нужно? А именно:

- Измерили память, потреблённую всем скриптом. Оказалось, что слишком много
- Что делать дальше? Измерять, сколько памяти потребляет конкретный участок кода (будь то функция или что-либо ещё). И вот здесь уже не помогут ни memory_get_usage() ни memory_get_peak_usage()
- Разумной альтернативой будет использовать профилировщик (и для задачи, которую Вы озвучили, это - наиболее правильное решение, поскольку только профилировщик предоставит точные данные)

Это то, что касается того, где может пригодиться возможность измерения памяти, потреблённой конкретным участком кода. Класс в данной теме предназначен для сравнительного анализа, его нельзя использовать для точных измерений, поскольку есть определённые ресурсы, которые он потребит для служебных целей. Однако, тем не менее, используя его, можно вполне достоверно узнать, что "функция X потребила на Z% больше/меньше памяти, чем функция Y" - а так же оценить порядок потребления памяти (но не абсолютно точное значение)
19. Hapson - 15 Ноября, 2013 - 18:25:40 - перейти к сообщению
EuGen пишет:
То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты?

Не понял, о чём Вы

Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти.
А в конце шаблона - то есть конец работы скрипта и загрузки html я вывожу значения.
Вот, это начало
http://clip2net[dot]com/s/6bmoaS
а это конец
http://clip2net[dot]com/s/6bmqeJ
20. EuGen - 15 Ноября, 2013 - 18:28:54 - перейти к сообщению
Hapson пишет:
Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти

Время определять так не стоит - потому что даже для всего скрипта оно будет незначащим, ведь однократное применение не даёт верного значения (тем более если речь идёт о веб-сайте, где приложение работает со многими сторонними ресурсами, порождая случайные сетевые задержки, например).
Память (Memory) - не имеет смысла, поскольку не отразит того, что делается уровнем ниже глобального.
Только "максимальная память" (Max Memory) имеет некий смысл, так как отразит максимально потреблённую память. Однако для полной картины это нужно собирать в статистических таблицах, поскольку если веб-сайт, например, работает с БД, то результат может быть разным в зависимости от её выборки и т.п.
21. Hapson - 15 Ноября, 2013 - 18:37:58 - перейти к сообщению
EuGen пишет:
Hapson пишет:
Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти

Время определять так не стоит - потому что даже для всего скрипта оно будет незначащим, ведь однократное применение не даёт верного значения (тем более если речь идёт о веб-сайте, где приложение работает со многими сторонними ресурсами, порождая случайные сетевые задержки, например).
Память (Memory) - не имеет смысла, поскольку не отразит того, что делается уровнем ниже глобального.
Только "максимальная память" (Max Memory) имеет некий смысл, так как отразит максимально потреблённую память. Однако для полной картины это нужно собирать в статистических таблицах, поскольку если веб-сайт, например, работает с БД, то результат может быть разным в зависимости от её выборки и т.п.

Ясно.
Ну время да - погоду показывает, а не время. Значения скачут сильно.
Max memory показывает вроде как правильно.
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.
22. EuGen - 15 Ноября, 2013 - 18:39:28 - перейти к сообщению
Hapson пишет:
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.

Нет, это не так - и Вы видели это на примере, который сами же и привели. Такой способ не учтёт ничего, что определено внутри окружения функций/методов
23. Hapson - 15 Ноября, 2013 - 18:45:50 - перейти к сообщению
EuGen пишет:
Hapson пишет:
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.

Нет, это не так - и Вы видели это на примере, который сами же и привели. Такой способ не учтёт ничего, что определено внутри окружения функций/методов

Ну тогда я не понимаю, откуда берется эта цифра
http://clip2net[dot]com/s/6bn1FT
У меня все действия происходят до подключения шаблона. Все происходит внутри функций. Наружу выходят только те переменные, которые нужно вывести в шаблоне.
Неужто 300 кБ используется для нескольких переменных и штук 10 подключенных черех include файлов?
24. Ch_chov - 15 Ноября, 2013 - 18:48:04 - перейти к сообщению
Hapson, в время работы скрипта функции берут память и освобождают её. Всю эту динамику вы этим кодом не сможете отследить. Да и не требуется это в вашем случае. Обычно всех интересует время генерации страницы и максимальный объём памяти, который выделялся для скрипта. Для этих целей ваш способ вполне подойдет.
25. Hapson - 15 Ноября, 2013 - 18:51:04 - перейти к сообщению
Ch_chov пишет:
Hapson, в время работы скрипта функции берут память и освобождают её. Всю эту динамику вы этим кодом не сможете отследить. Да и не требуется это в вашем случае. Обычно всех интересует время генерации страницы и максимальный объём памяти, который выделялся для скрипта. Для этих целей ваш способ вполне подойдет.

Да, теперь понял. Функция сожрала, функция освободила.
Сейчас проверил. Добавлял внутрь функции переменную и запускал функцию в цикле.
С одной и с двумя переменными Memory не меняется, а Max Memory увеличивается.
Значит действительно, memory_get_usage бесполезна

 

Powered by ExBB FM 1.0 RC1