ProfileCount

Материал из wikiru.visual-prolog.com

Для измерения времени выполнения предикатов можно использовать класс 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