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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Измерение памяти и времени в PHP
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Приветствую,
Представляю вашему вниманию простой инструмент, который предоставляет возможность тестировать функции - чтобы измерить время их исполнения/потребляемую память. Так же существует возможность определять собственную функцию для измерения, однако она, разумеется, должна возвращать числовые значения.
Следует понимать, что инструмент предназначен для сравнительных измерений. Иначе говоря, есть две (или больше) функции и требуется понять, насколько первая лучше/хуже второй. Для этого данный инструмент и будет полезен. Он не предназначен для получения точных (абсолютных) значений используемой памяти/времени, так как использует много внутренних преобразований и вызовов, что служит причиной пусть и небольшой, но неточности.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
esterio
Отправлено: 15 Ноября, 2013 - 11:43:26
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
а можно одновременно и вермя и память логировать
EuGen
Отправлено: 15 Ноября, 2013 - 11:47:17
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
esterio
Это разные измерения и потому они проводятся разными методами. Однако же ничто не мешает измерить время, затем память и после этого через array_merge() собрать всё в один массив (именно по этой причине флаги значений в классе сделаны различными)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Ch_chov
Отправлено: 15 Ноября, 2013 - 15:14:10
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Вообще, измерение памяти для моих задач было весьма критичным моментом. При этом дело сводилось зачастую к таким вещам, как проверка копирования/передачи по ссылке. При этом использовать внешний профилировщик было неудобно из-за большого объема мелких правок при оптимизации.
Кроме того, данный инструмент успешно использовался для измерений используемого файлового пространства для функций, оперирующих с ФС. Насчёт времени - это верно. Как правило, 1E6 - минимальный порог определения достоверности измерения.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Ch_chov
Отправлено: 15 Ноября, 2013 - 16:38:50
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
EuGen пишет:
данный инструмент успешно использовался для измерений используемого файлового пространства для функций, оперирующих с ФС
Каким образом?
EuGen
Отправлено: 15 Ноября, 2013 - 16:41:16
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Ch_chov пишет:
Каким образом?
Передачей измеряющего callback, в котором выполняется что-нибудь наподобие system() + df
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Ch_chov
Отправлено: 15 Ноября, 2013 - 16:46:46
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
EuGen
Отправлено: 15 Ноября, 2013 - 17:38:22
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Hapson пишет:
Не пойму, зачем для этого писать столько кода...
В Вашем случае и тот код, что Вы привели - не нужен, поскольку верным инструментом будет профилировщик. Кроме того, Вы никогда не сможете таким способом измерить память.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Hapson
Отправлено: 15 Ноября, 2013 - 17:43:25
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
EuGen пишет:
Вы никогда не сможете таким способом измерить память
- Время нельзя измерить одной итерацией. Как уже сказано выше, для этого требуется как минимум 1E6 повторений
- "Память" (Memory) измерена неверно, так как в глобальном контексте переменная внутри функции foo() не будет учтена, однако там строка длиной 4*1E4 байт
- "Максимальная память" (Max Memory) измерена неверно, так как до старта теста есть контекст, который использует больше памяти, чем тестируемая функция.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
esterio
Отправлено: 15 Ноября, 2013 - 17:50:26
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
Hapson
Здесь идет потрбление памяти конкретной функции, а не скрипта в целом
Hapson
Отправлено: 15 Ноября, 2013 - 18:02:15
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
esterio пишет:
Hapson
Здесь идет потрбление памяти конкретной функции, а не скрипта в целом
Все равно не пойму...
Если мне нужно сравнить функции, то делаю примерно так
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.