Что-то быстрее, чем GetSystemTime? - PullRequest
0 голосов
/ 22 сентября 2010

Я пишу апплет регистрации DDE на Visual C ++, который регистрирует несколько сотен событий в минуту, и мне нужен более быстрый способ сэкономить время, чем вызов GetSystemTime в winapi.У вас есть какие-нибудь идеи?

(спрашиваю об этом, потому что при тестировании под нагрузкой все исключения были вызваны вызовом getsystemtime)

Ответы [ 5 ]

3 голосов
/ 22 сентября 2010

Существует в основном недокументированная структура с именем USER_SHARED_DATA по высокому адресу для чтения пользователем, который содержит время и другие глобальные вещи, но GetSystemTime просто извлекает время оттуда и вызывает RtlTimeToTimeFields такВы не можете получить много, непосредственно используя структуру.

1 голос
/ 22 сентября 2010

согласно вашим комментариям; звонить GetSystemDateFormat и GetSystemTimeFormat каждый раз будет пустой тратой времени. Они вряд ли изменятся, поэтому эти значения могут быть легко кэшированы для повышения производительности. Я предположил бы (не фактически проверяя это), что эти два вызова намного более трудоемки чем вызов GetSystemTime.

1 голос
/ 22 сентября 2010

Возможно, сумасшедшая мысль: вам определенно нужна точная метка времени? Предположим, у вас есть только системное время, скажем, каждый 10-й звонок - насколько это будет плохо?

0 голосов
/ 23 сентября 2010

Во-первых, самый быстрый способ, которым я мог подумать, - использовать инструкцию RDTSC.RDTSC - это инструкция счетчика меток времени Intel с точностью до наносекунды.Используйте его как комбинацию с инструкцией CPUID.Чтобы правильно использовать эти инструкции, вы можете прочитать « Использование инструкции RDTSC для мониторинга производительности », после чего вы можете преобразовать наносекунды в секунды для вашей цели.

Во-вторых, рассмотрите возможность использования QueryPerformanceFrequency ()и QueryPerformanceCounter ().

В-третьих, не самый быстрый, но гораздо быстрее, чем стандартный GetSystemTime (), то есть с использованием timeGetTime ().

0 голосов
/ 22 сентября 2010

Прежде всего, выясните, почему ваш код генерирует исключения (при условии, что вы правильно его описали: то есть, было сгенерировано настоящее исключение, и приложение спускается в режим ядра - что на самом деле очень медленно).

тогда вы, скорее всего, устраните любое узкое место в производительности.

Крис Дж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...