Что такое таймеры, единица, используемая секундомером .ElapsedTicks

Раньше я думал, что

  • Stopwatch.ElapsedTicks был равен
  • Stopwatch.Elapsed.Ticks.

Но это не так. В то время как последний является периодом в 100 наносекунд, первые используют таинственную единицу под названием timer ticks. Интересно, что это такое и почему они отличаются от обычной единицы измерения?

Ответ 1

От документы:

Секундомер измеряет прошедшее время, подсчитывая отметки таймера в базовом таймерном механизме. Если установленная аппаратная и операционная система поддерживает счетчик производительности с высоким разрешением, то класс секундомера использует этот счетчик для измерения прошедшего времени. В противном случае класс секундомера использует системный таймер для измерения прошедшего времени. Используйте поля Frequency и IsHighResolution, чтобы определить точность и разрешение реализации синхронизации секундомера.

Да, это боль, которая "тикает" перегружена, чтобы означать две разные вещи: (

Я думаю, это в основном потому, что Stopwatch дает довольно "сырое" представление счетчика производительности, которое может иметь разные реализации, что означает "тик".

Ответ 2

Stopwatch.ElapsedTicks измеряет "галочку" в терминах секундомера, длина которого составляет 1 секунду /Stopwatch.Frequency.

Внутри это основано на поддержке высокопроизводительных счетчиков Windows (если поддерживается вашей системой, что почти всегда верно). Нативный вызов QueryPerformanceFrequency, который будет варьироваться в зависимости от вашей аппаратной поддержки.

Ответ 3

Может быть, это помогает увидеть вывод консоли...

LinkedList 500 операции вставки/удаления ElapsedTicks: 45871
LinkedList 500 вставить/удалить операции Elapsed.ticks: 141266
LinkedList 500 вставки/удаления операций milisec: 14.1266
Список 500 операций вставки/удаления ElapsedTicks: 1235121
Список 500 операций вставки/удаления Elapsed.ticks: 3803744
Список 500 операций вставки/удаления milisec: 380.3744

(из которого подтверждается, что Elapsed.Ticks измеряются в 100 наносекундах)