На главную

Использование API Logger для профилировки программ
Для профилирования используется замер времени через функцию QueryPerfomanceCounter
Производится получение времени входа в функцию, время выхода из функции, по этим данным можно судить о времени выполнения
Для включения профилировки необходимо в настройках включить опции Function Profiler, можно добавить опцию Time
Есть два значения:
1. В микросекундах
2. В количестве тиков
К примеру на одном из конфигураций получили след. значение:
Разрешение таймера QPC Frequency=3579545 tics/sec
(будет отличатся на разных конфигурациях компьютеров и может отличатся при перезагрузках)

Кусок лога:
Время входа: час/мин/сек/миллисек/микросек                                                                         Время выполнения в микросекундах     время в тиках
||||||||||||||||                                                                                                                        |       |
08:27:15:062:190  hello.exe    00404F07 0F58 WriteFile(00000007, 0012FA84: "Hello World!", 0000001D, 0012FA78, 00000000) ret: 00000001 [124] [446]
08:27:15:062:195  kernel32.dll 7C81CC19 0F58  WriteConsoleA(00000007, 0012FA84: "Hello World!", 0000001D, 0012FA78, 00000000) ret: 00000001 [118] [425]
08:27:15:062:449  hello.exe    004013B9 0F58 CreateFileA(00407474: "CONIN$", C0000000, 00000003, 00000000, 00000003, 00000000, 00000000) ret: 0000000F [56] [203]
08:27:15:062:454  kernel32.dll 7C801A4F 0F58  CreateFileW(7FFDFC00: "CONIN$", C0000000, 00000003, 00000000, 00000003, 00000000, 00000000) ret: 0000000F [50] [180]
08:27:15:062:463  kernel32.dll 7C811216 0F58   lstrcmpiW(7C811284: "CONIN$", 7C811284: "CONIN$") ret: 00000000 [20] [74]
08:27:15:062:468  kernel32.dll 7C80A83D 0F58    GetThreadLocale() ret: 00000419 [3] [14]
08:27:15:062:477  kernel32.dll 7C80A843 0F58    CompareStringW(00000419, 00000001, 7C811284: "CONIN$", FFFFFFFF, 7C811284: "CONIN$", FFFFFFFF) ret: 00000002 [5] [19]
Микросекунда является крупной величиной для замера времени исполнения кода, если недостаточно точности и позволяет разрешение таймера, в лог включается время в "тиках" таймера. Для перевода из "тиков" во время нужно
В миллисек:
D_ms = x * QPCFreq / 1000000;
D_ns = x * QPCFreq / 1000000000;

D_ms - время в микросекундах
D_ns - время в наносекундах
x - значение в тиках (последняя колонка  в логе)
QPCFreq - разрешение таймера (указывается в самом начале лога шпиона  как  QPC Frequency)
© black_ninja    http://blackninja2000.narod.ru

Используются технологии uCoz