DbgHRPCCurrent
| DbgHRPCCurrent (Функции отладки) | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Отладочная функция получает текущее значение таймера высокой точности (High-Resolution Performance Counter, обычно включение происходит в BIOS компьютера). Если таймер не включен на системном уровне, функция возвращает 0. Таймер высокой точности позволяет точно замерить время выполнения операций, также он используется встроенным в отладчик профайлером, без него профайлер будет подсчитывать только количество вызовов, но не время их исполнения.
Синтаксис
dbgHRPCCurrent():<Текущее значение т.в.т. (INT)>
Возвращаемое значение
Функция возвращает число, показания т.в.т или 0, если доступ к таймеру отсутствует
Примеры
//Создаем переменную заранее
a:=0;
Чл1:=Date();
For i:=1 To 1000000 Do
a:=0;
EndDo;
Чл1:=GetPeriodMs(Чл1);
Message("Руководствуясь системными часами, миллион операций присваивания занял: "+Чл1+" мс.");
If DbgHRPCAvailable Then
Чл2:=dbgHRPCCurrent();
For i:=1 To 1000000 Do
a:=0;
EndDo;
Чл2:=dbgHRPCGetPeriod(Чл2);
Чл2:=Чл2/1000000;
Message("Руководствуясь т.в.т., миллион операций присваивания занял: "+Чл2+" мс.");
EndIf;
//Для i5:
//"Руководствуясь системными часами, миллион операций присваивания занял: 593 мс." -- точность этого таймера составляет не более 20мс.
//"Руководствуясь т.в.т., миллион операций присваивания занял: 597.547944 мс." -- точность этого таймера очень велика (зависит от конкретной машины)
// Если исполнить блок несколько раз, появится разброс в показаниях, обусловленный тем, что операционная система в фоне может выполнять другие процессы.
//Нужно заметить, что эксперимент не совсем верно ответил на вопрос, какое время занимает выполнение миллиона операций присваивания, так как
// и для первого и для второго случая, в это время включаются дополнительные команды конструкции цикла и нахождения времени после окончания цикла.
//Чтобы исключить время исполнения инструкций цикла и других инструкций, достаточно провести замер без инструкции "a:=0". Для двух циклов,
// время должно быть несколько разным, так как GetPeriodMs и dbgHRPCGetPeriod занимают разное время.
//
//Также можно использовать встроенный профайлер, однако, при включенном профайлере скорость исполнения инструкций будет несколько ниже.