cronometragem de precisão em .NET
Pergunta
Eu vi este pergunta, onde uma das respostas indica que System.Diagnostics.Stopwatch só deve ser utilizado para o diagnóstico de desempenho e não no código de produção.
Nesse caso, qual seria a melhor maneira de obter uma precisão de tempo em .NET? Eu estou atualmente nos estágios iniciais de construção de uma forma muito simples MIDI sequenciador usando o MIDI-out funcionalidade de NAudio . Eu gostaria de ser capaz de enviar mensagens MIDI para fora alinhado com (digamos) 1 / 10s com tão pouco jitter possível. É isso possível, ou será coisas como ruína meu dia de comutação de contexto?
Actualmente tenho algum código em um aplicativo de console que chama continuamente Stopwatch
e calcula o jitter ao gerar um fluxo de 1 / 16th-notes em 150bpm. O jitter é muito baixa nesta situação. No entanto, vou me mudar isto fora para outro segmento, então eu não sei se isso continuará a ser o caso.
Solução
Se você não se importa P / Invoke, você pode usar QueryPerformanceCounter: http: // www .eggheadcafe.com / artigos / 20021111.asp
Outras dicas
Você também pode usar o nativo de streaming API MIDI. Eu não acho que é em NAudio mas você pode olhar para o C # Midi Toolkit para ver se que um suporta. Caso contrário, você tem dois exemplos de como fazer nativa MIDI API P / Invoke e pode lançar seu próprio ...
o Windows multimedia temporizador estados que ele permite "aplicações para eventos programação do temporizador com a maior resolução (ou precisão) possível para a plataforma de hardware."
O aplicativo usa como exemplo é um sequenciador MIDI.