Difference between revisions of "DbgHRPCGetPeriod"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:50, 7 February 2021
DbgHRPCGetPeriod (Функции отладки) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Отладочная функция получает промежуток времени, прошедший от предыдущего значения таймера высокой точности (High-Resolution Performance Counter, обычно включение происходит в BIOS компьютера) до текущего момента, выраженное в наносекундах. Если таймер не включен на системном уровне, функция возвращает пустое значение. Перевод периода в секунды можно осуществить по формуле <Результат>/1000000000
. Таймер высокой точности позволяет точно замерить время выполнения операций, также он используется встроенным в отладчик профайлером, без него профайлер будет подсчитывать только количество вызовов, но не время их исполнения.
Синтаксис
dbgHRPCGetPeriod(<Предыдущее значение т.в.т. (INT)>):<Прошедшее время в наносекундах (INT)>
Аргументы
<Предыдущее значение т.в.т. (INT)>
- Числовое значение, предыдущее показание т.в.т.
Возвращаемое значение
Функция возвращает число, разницу между предыдущим и текущим показаниями т.в.т., выраженную в наносекундах.
Примеры
//Создаем переменную заранее 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 занимают разное время. // //Также можно использовать встроенный профайлер, однако, при включенном профайлере скорость исполнения инструкций будет несколько ниже.