Я только что видел this question, где один из ответов указывает, что System.Diagnostics.Stopwatch должен использоваться только для диагностики производительности, а не для производственного кода.Точность синхронизации в .NET
В этом случае, какой был бы лучший способ получить точное время в .NET? В настоящее время я нахожусь на ранней стадии построения очень простого секвенсора MIDI, используя функциональность MIDI-out от NAudio. Я хотел бы иметь возможность отправлять MIDI-сообщения в соответствии с (скажем) 1/10 с минимальным дрожанием. Возможно ли это, или такие вещи, как переключение контекста, разрушают мой день?
В настоящее время у меня есть код в консольном приложении, который непрерывно вызывает Stopwatch
и вычисляет дрожание при генерации потока 1/16-й ноты со скоростью 150bpm. В этой ситуации джиттер очень низок. Однако я переведу это в другой поток, поэтому я не знаю, сохранится ли это.
+1. Счетчики производительности дают вам самый точный, легкий счетчик, который вы можете найти. Это не так просто, как другие реализации. –
Насколько я понимаю, секундомер использует QueryPerformanceCounter, если он доступен. Я не имею ничего против QPC и использовал его в приложениях C++/Win32 раньше, однако я не знаю, что происходит на нижних уровнях CLR, поэтому было интересно, есть ли лучший способ. – geofftnz
Вы правы, Секундомер действительно использует QueryPerformanceCounter - я не понял. Прочитав другой вопрос, я думаю, что единственная причина, по которой кто-то рекомендовал использовать секундомер в производстве, состоял в том, что он несет некоторые накладные расходы, но я думаю, что это довольно мало и легко измеряется. – RichieHindle