За рутинни приложения за настолни бази данни добавянето на една секунда към времето за изпълнение на задачата рядко има значение за крайните потребители - но когато трябва да обработите милиони дървесни листа или да генерирате милиарди уникални случайни числа, скоростта на изпълнение става по-важна.
График на вашия код
В някои приложения са важни и за щастие много точни, точни методи за измерване на времето Delphi осигурява високоефективен брояч, който да се класира в тези времена.
Използване на RTL Сега функция
Единият вариант използва Сега функция. Сега, дефинирани в SysUtils единица, връща текущата дата и час на системата.
Няколко реда кодова мярка измина времето между „старта“ и „спирането“ на някакъв процес:
Функцията Now връща текущата системна дата и час, които са точни до 10 милисекунди (Windows NT и по-нови) или 55 милисекунди (Windows 98).
За много малки интервали точността на "Сега" понякога не е достатъчна.
Използване на Windows API GetTickCount
За още по-точни данни използвайте
GetTickCountAPI на Windows функция. GetTickCount извлича броя на милисекундите, изминали от стартирането на системата, но функцията има само точността от 1 ms и не винаги може да бъде точна, ако компютърът остане захранван за дълги периоди от време.Изминалото време се съхранява като DWORD (32-битова) стойност. Следователно времето ще се завърне до нула, ако Windows се работи непрекъснато в продължение на 49,7 дни.
GetTickCount също е ограничена до точността на системния таймер (10/55 ms).
Висока прецизност и отчитане на вашия код
Ако вашият компютър поддържа брояч на производителност с висока разделителна способност, използвайте QueryPerformanceFrequency Функция за API на Windows за изразяване на честотата в броени секунди. Стойността на броя зависи от процесора.
Най- QueryPerformanceCounter функция извлича текущата стойност на брояча на производителността с висока разделителна способност. Като извиква тази функция в началото и в края на раздел от кода, приложението използва брояча като таймер с висока резолюция.
Точността на таймерите с висока резолюция е около няколкостотин наносекунди. Наносекундата е единица време, представляваща 0,000000001 секунди - или 1 милиард от секундата.
TStopWatch: Delphi внедряване на брояч с висока резолюция
С кимване към .Net назоваване на конвенции, брояч като TStopWatch предлага решение с висока резолюция Delphi за прецизни измервания на времето.
TStopWatch измерва изминалото време, като брои таймерите в основния механизъм на таймера.
- Най- IsHighResolution свойството показва дали таймерът се основава на брояч на производителност с висока разделителна способност.
- Най- начало метод започва измерване на изминало време.
- Най- Спри се метод спира измерването на изминалото време.
- Най- ElapsedMilliseconds свойството получава общото изминало време в милисекунди.
- Най- Изминало свойството получава общото изминало време в таймерите.
Ето пример за използване: