Я знаю, что эта тема немного старая, но я хотел бы добавить больше информации.
Во-первых, я согласен, что QueryPerformanceCounter может занять больше времени на определенных машинах, но я не уверен, что ответ Рона является причиной этого все время.
Пока я проводил некоторые исследования по этой проблеме, я нашел несколько веб-страниц, рассказывающих о том, как реализован QueryPerformanceCounter.
Например, Точность не совпадает с точностью говорит мне, что Windows, HAL, чтобы быть более конкретным, будет использовать другое устройство синхронизации для получения значения. Это означает, что если в окнах используется более медленное устройство синхронизации, такое как PIT, потребуется больше времени для получения значения времени. Очевидно, что для использования PIT может потребоваться транзакция PCI, что может быть одной из причин.
Я также нашел другую статью: Как это работает: выходы таймера в SQL Server 2008 R2 - инвариантный TSC, дающий аналогичное описание. Фактически, эта статья рассказывает, как SQLServer наилучшим образом рассчитывал время транзакции.
Затем я нашел больше информации на сайте VMware, потому что мне пришлось иметь дело с клиентами, которые используют виртуальные машины, и я обнаружил, что существуют другие проблемы с измерением времени с виртуальными машинами. Для тех, кто заинтересован, обратитесь к статье VMware - хронометраж в виртуальных машинах VMware.
В этой статье также говорится о том, как некоторые версии окон будут синхронизировать каждый TSC. Таким образом, было бы безопасно использовать QueryPerformanceCounter () в определенных ситуациях, и я думаю, что мы должны попробовать что-то вроде того, как это работает: выходы таймера в SQL Server 2008 R2 предложили найти, что может произойти, когда мы вызываем QueryPerformanceCounter ()