ProfilerStart

From SunFlurry wiki
Jump to: navigation, search
  ProfilerStart (Функции отладки)
Объект:Функции общего назначения
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Визуальность:Нет

Функция включает встроенный профайлер, если это позволяет текущий режим отладки. Данные, накопленные профайлером ранее не изменяются. При включенном профайлере программа исполняется несколько медленнее. Для включения профайлера режим отладки должен быть активирован (см. DebuggingRights). Доступ к накопленным результатам профилирования осуществляется через отладчик, где можно отсортировать результаты по количеству обращений или затраченному времени исполнения. Для корректной работы профайлера необходимо, чтобы компьютер имел встроенный таймер высокой точности, который должен быть переведен в рабочее состояние (обычно включение такого таймера происходит в BIOSе компьютера). Без таймера высокой точности профайлер не будет подсчитывать затраченное время, а будет накапливать только количество обращений к строкам и функциям кода. См. Встроенный отладчик, Встроенный профайлер.

Синтаксис

ProfilerStart()


Примеры

  Function Square(a)
    Exit a*a;
  EndFunction

//Включить режим отладки
DebuggingRights(1);

//Очистить предыдущие результаты профилирования
ProfilerClear;

//Включить профайлер
ProfilerStart;

//Находим разницу во времени выполнения функции разными способами
For i:=1 to 100000 Do
  Square(i);
EndDo;

For i:=1 to 100000 Do
  ExecuteFunction("Square",1,i);
EndDo;

//Останавливаем профайлер
ProfilerStop;


Период:=dbgHRPCCurrent();
For i:=1 to 100000 Do
  Exec("Square(i)");
EndDo;
Период:=dbgHRPCGetPeriod(Период)/1000000;
Message("Выполнение Exec: "+Период+" мс.");


//Вызываем окно отладчика для просмотра результатов профилирования
DebugBreak;

//Функция DebugBreak не должна быть последней в модуле
Message("Тест выполнен успешно");

//Для i5 на Windows 7 результаты профилирования были следующими:
//* Прямой вызов функции занял 223 мс.
//* Использование функции ExecuteFunction заняло 296 мс.
//* Компиляция текста и вызов функции заняли 1210 мс. 
//  Комментарий: компиляция и выполнение уменьшает скорость работы профайлера, так как увеличивается количество исходных текстов в массиве, из которого производится поиск при профилировании
//  Для массива текстов размером в ~10000, профайлер замедляет исполнение примерно в 1.4 раза по сравнению с работой профайлера с пустым массивом (коэффициент можно найти, если переставить местами
//      циклы, включить цикл Exec в профилирование и сравнить результаты). Поэтому, время исполнения последнего цикла было найдено без помощи профайлера.

//Вывод: компиляция текста осуществляется сравнительно быстро для небольших текстовых фрагментов, но такое исполнение примерно в 5 раз медленнее, чем вызов функции напрямую.
//  Поэтому для случаев, когда это возможно, выгоднее использовать функцию ExecuteFunction.
//Время компиляции Exec нивелируется для больших текстов вызываемых небольшое количество раз (обычный способ исполнения скрипта).