ProfileCount: различия между версиями
м |
м |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 17: | Строка 17: | ||
</vip> | </vip> | ||
Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат '''start''' не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов. {{note|picsize=30|content= | Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат '''start''' не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов. {{note|picsize=30|content=Самое главное, не забыть убрать опцию '''/PROFILE''' после, того, как все замеры будут произведены.}} Если модуль построен без опции '''/PROFILE''', то предикат '''start''' не имеет никакого эффекта. | ||
Текущая версия на 14:28, 19 декабря 2007
Для измерения времени выполнения предикатов можно использовать класс profileCount из пакета pfc\profile. Перед его использованием необходимо добавить опцию компилятора /PROFILE и перестроить проект. Также необходимо вставить вызовы запускающие профилирование start, обычно при инициализации приложения, останова stop и вывода результатов print (обычно в конце приложения).
Вот типичный пример использования в консольном приложении:
clauses run():- console::init(), profileCount::start(), try главныйПредикат() finally profileCount::stop(), Out = console::getConsoleOutputStream(), profileCount::print(Out) end try.
Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат start не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов.
Если модуль построен без опции /PROFILE, то предикат start не имеет никакого эффекта.
Пример результат работы:
Predicate invocations count information: 1. outputStream::write/0... 1 0.00017656 2. bufferSupport::getBuffer/2 2 0.00014974 3. outputStream::write/0... 1 0.00009526 4. outputStream_console::writeToStdDevice/4 2 0.00007683 5. outputStream::flush/0 1 0.00007599 6. outputStream_console::bufferFullCB/2 2 0.00006397 7. list::filter/2-> 1 0.00003436 8. авто::new/1-> 3 0.00003241 9. list::getMember_nd/1-> 6 0.00002123 10. fileSystem_api::lf_crlf/4 2 0.00002039 11. outputStream_console::convertLF2CRLF_ifNeeded/4 2 0.00001062 12. main::run$1/0 3 0.00000726 13. fileSystem_api::searchLineFeeds/6 2 0.00000698 14. авто::цена/0-> 4 0.00000670 15. stream::getMode/0-> 4 0.00000615 16. console::write/0... 1 0.00000615 17. авто::new/1 3 0.00000475 18. fileSystem_api::convertToCRLF_IfNeeded/4-> 2 0.00000419 19. console_api::getStdHandle/1-> 2 0.00000391 20. fileSystem_api::getSize/2-> 2 0.00000363 21. outputSupport::doNotFlush/0 1 0.00000307 22. console::getConsoleOutputStream/0-> 1 0.00000251