Таймер высокой производительности в Delphi

Для обычных приложений настольных баз данных добавление одной секунды ко времени выполнения задачи редко имеет значение для конечных пользователей - но когда вам нужно обработать миллионы листьев дерева или сгенерировать миллиарды уникальных случайных чисел, скорость выполнения становится более важной.

Сроки вашего кода

В некоторых приложениях очень точные и высокоточные методы измерения времени важны и к счастью Delphi обеспечивает высокопроизводительный счетчик, чтобы квалифицировать эти времена.

Использование RTL Сейчас функция

Один вариант использует Сейчас функция. Сейчас, определенный в SysUtils единица, возвращает текущую системную дату и время.

Несколько строк кода измеряют время, прошедшее между «началом» и «остановкой» некоторого процесса:

Функция Now возвращает текущую системную дату и время с точностью до 10 миллисекунд (Windows NT и более поздние версии) или 55 миллисекунд (Windows 98).

Для очень маленьких интервалов точности «сейчас» иногда недостаточно.

Использование Windows API GetTickCount

instagram viewer

Для получения еще более точных данных используйте GetTickCountWindows API функция. GetTickCount извлекает количество миллисекунд, прошедших с момента запуска системы, но функция имеет только с точностью до 1 мс и не всегда может быть точным, если компьютер остается включенным в течение длительного времени время.

Истекшее время сохраняется как значение DWORD (32-разрядное). Следовательно, время будет сведено к нулю, если Windows будет работать непрерывно в течение 49,7 дней.

GetTickCount также ограничивается точностью системного таймера (10/55 мс).

Высокоточный тайминг вашего кода

Если ваш ПК поддерживает счетчик производительности с высоким разрешением, используйте QueryPerformanceFrequency Функция Windows API для выражения частоты в секундах. Значение счетчика зависит от процессора.

QueryPerformanceCounter Функция извлекает текущее значение счетчика производительности высокого разрешения. Вызывая эту функцию в начале и конце фрагмента кода, приложение использует счетчик в качестве таймера высокого разрешения.

Точность таймеров высокого разрешения составляет около нескольких сотен наносекунд. Наносекунда - это единица времени, представляющая 0,000000001 секунды или 1 миллиардную долю секунды.

TStopWatch: реализация Delphi счетчика высокого разрешения

С кивком на .Net именования, счетчик, как TStopWatch предлагает решение Delphi с высоким разрешением для точного измерения времени.

TStopWatch измеряет прошедшее время путем подсчета тиков таймера в базовом механизме таймера.

  • IsHighResolution свойство указывает, основан ли таймер на счетчике производительности с высоким разрешением.
  • Начало Метод начинает измерение прошедшего времени.
  • Стоп Метод прекращает измерять прошедшее время.
  • ElapsedMilliseconds свойство получает общее время, прошедшее в миллисекундах.
  • Прошедшее свойство получает общее истекшее время в тиках таймера.

Вот пример использования:

instagram story viewer