![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Измерение быстродейсвия кода [D5, D6, Win95/98, Win2k]
Mirovodin © (2002-09-23 15:58:00)Кто какие способы знает? Собсвенно необходима максимальная точность. В принципе есть неплохая функция GetTickCount:
T1:=GetTickCount;
...
Анализируемый код
...
T2:=GetTickCount;
Время выполнения T2-T2 в мс, но может кто еще что посоветует? может можно такты процессора получать ?
Mirovodin (2002-09-23 16:23:00) [1]Спасибо, нашел рабочий пример:
http://www.delphikingdom.com/treasury/rdtsc.htm
RV (2002-09-23 16:05:00) [2]не знаю то, или не то
вот когда-то нарыл, не проверял
function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi : DWORD;
TimerLo : DWORD;
PriorityClass : Integer;
Priority : Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(100);
asm
DW 310Fh // rdtsc
MOV TimerLo, EAX
MOV TimerHi, EDX
end;
Sleep(DelayTime);
asm
DW 310Fh // rdtsc
SUB EAX, TimerLo
SBB EDX, TimerHi
MOV TimerLo, EAX
MOV TimerHi, EDX
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
// Usage ...
LabelCPUSpeed.Caption := Format("CPU speed: %f MHz", [GetCPUSpeed]);
MBo (2002-09-23 16:05:00) [3]>может можно такты процессора получать ?
Да, можно QueryPerfomanceCounter или RDTSC (0x0F, 0x31, если не ошибаюсь)
Причем можно для повышения точности учитывать время на вызов (однократный Старт-Стоп)
Anatoly Podgoretsky (2002-09-23 16:03:00) [4]Ассемблерная команда RDTSC - точность один тик процессора