ProfileCount: различия между версиями
Строка 18: | Строка 18: | ||
Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат '''start''' не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов. И, самое главное, не забыть убрать опцию '''/PROFILE''' после, того, как все замеры будут произведены. Если модуль построен без опции '''/PROFILE''', то предикат '''start''' не имеет никакого эффекта. | Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат '''start''' не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов. И, самое главное, не забыть убрать опцию '''/PROFILE''' после, того, как все замеры будут произведены. Если модуль построен без опции '''/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 | |||
[[Категория:Profile]] | [[Категория:Profile]] |
Версия 16:40, 2 ноября 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 после, того, как все замеры будут произведены. Если модуль построен без опции /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