MeasureSleep
используется для измерения точности Sleep(n). По умолчанию он находится в бесконечном цикле измерения дельт сна, но вы можете использовать аргумент --samples
для получения средних показателей и показателей STDEV.
SetTimerResolution
используется для запроса более высокого разрешения путем вызова NtSetTimerResolution. В качестве примера автоматического запуска скрытого экземпляра программы при запуске системы и повышения разрешения до 0,5 мс поместите двоичный файл в безопасное место и создайте запланированное задание в планировщике задач (инструкции), используя команду ниже в качестве примера.
C:SetTimerResolution.exe --resolution 5000 --no-console
Согласно комментарию к статье «Великое изменение правил», в Windows Server 2022+ и Windows 11+ ключ реестра, указанный ниже, также можно использовать, чтобы запрос более высокого разрешения был эффективен на общесистемном уровне, а не только на вызывающем процессе. Это следует использовать только в целях отладки.
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Managerkernel]
"GlobalTimerResolutionRequests"=dword:00000001
Сценарий micro-adjust-benchmark.ps1 можно использовать для автоматизации процесса сопоставления точности с разрешением. Результаты можно визуализировать с помощьюchart-studio.plotly.com.
git clone https: // github.com / valleyofdoom / TimerResolution.git
cd .TimerResolution
# x64
$ env: VCPKG_DEFAULT_TRIPLET = " x64-windows "
# install dependencies
vcpkg install
# replace "SetTimerResolution" with "MeasureSleep" if desired
MSBuild.exe .TimerResolution.sln - p:Configuration = Release - p:Platform = x64 - t:SetTimerResolution