Acabo de ver this question, donde una de las respuestas indica que System.Diagnostics.Stopwatch solo debe utilizarse para diagnosticar el rendimiento y no en el código de producción.Tiempo de precisión en .NET
En ese caso, ¿cuál sería la mejor manera de obtener sincronización de precisión en .NET? Actualmente estoy en las primeras etapas de construir un secuenciador MIDI muy simple usando la funcionalidad de salida MIDI de NAudio. Me gustaría poder enviar mensajes MIDI alineados a (digamos) 1/10s con la menor inestabilidad posible. ¿Es esto factible o las cosas como el cambio de contexto arruinarán mi día?
Actualmente tengo un código en una aplicación de consola que llama continuamente a Stopwatch
y calcula el jitter al generar una secuencia de 1/16 notas a 150bpm. La inestabilidad es muy baja en esta situación. Sin embargo, voy a pasar esto a otro hilo, por lo que no sé si ese será el caso.
+1. Los contadores de rendimiento le proporcionarán el contador más preciso y liviano que pueda encontrar. Simplemente no es tan sencillo como otras implementaciones. –
Por lo que entiendo, Cronómetro utiliza QueryPerformanceCounter si está disponible. No tengo nada en contra de QPC y lo he usado en aplicaciones C++/Win32 antes, sin embargo, no sé lo que sucede en los niveles inferiores de la CLR, así que me preguntaba si habría una mejor manera. – geofftnz
Tiene razón, Cronómetro utiliza QueryPerformanceCounter - No me había dado cuenta. Después de leer la otra pregunta, creo que la única razón por la que alguien me recomendó no usar Cronómetro en producción fue que lleva un poco de sobrecarga, pero imagino que es bastante pequeña y fácil de medir. – RichieHindle