DbgHRPCGetPeriod
| 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 занимают разное время.
//
//Также можно использовать встроенный профайлер, однако, при включенном профайлере скорость исполнения инструкций будет несколько ниже.