Ho appena visto this question, dove una delle risposte indica che System.Diagnostics.Stopwatch deve essere utilizzato solo per diagnosticare le prestazioni e non nel codice di produzione.Timer di precisione in .NET
In tal caso, quale sarebbe il modo migliore per ottenere un timing preciso in .NET? Sono attualmente nelle fasi iniziali della creazione di un semplice sequencer MIDI che utilizza la funzionalità di uscita MIDI di NAudio. Mi piacerebbe essere in grado di inviare messaggi MIDI allineati a (diciamo) 1/10 con il minimo jitter possibile. È fattibile, o cose come il cambio di contesto rovinerebbe la mia giornata?
Attualmente ho del codice in un'app console che chiama continuamente Stopwatch
e calcola il jitter durante la generazione di un flusso di 1/16 a 150 bpm. Il jitter è molto basso in questa situazione. Tuttavia, lo trasferirò su un'altra discussione, quindi non so se rimarrà il caso.
+1. I contatori delle prestazioni ti daranno il contatore più preciso e leggero che riesci a trovare. Non è così semplice come altre implementazioni. –
Da quanto ho capito, Stopwatch utilizza QueryPerformanceCounter se disponibile. Non ho nulla contro QPC e l'ho usato in applicazioni C++/Win32 prima, ma non so cosa succede nei livelli più bassi del CLR quindi mi chiedevo se c'era un modo migliore. – geofftnz
Hai ragione, Cronometro utilizza QueryPerformanceCounter - non me ne ero reso conto. Dopo aver letto l'altra domanda, penso che l'unica ragione per cui qualcuno ha consigliato di non utilizzare Cronometro in produzione era che portava un sovraccarico, ma immagino sia piuttosto piccolo e facilmente misurabile. – RichieHindle