Dentro del constructor estático Stopwatch
podemos ver el siguiente código, que básicamente verifica si existe un contador de rendimiento de alta resolución.Explicación sobre el contador de rendimiento de alta resolución y su existencia relacionada con .NET Stopwatch?
static Stopwatch()
{
if (!SafeNativeMethods.QueryPerformanceFrequency(out Frequency))
{
IsHighResolution = false;
Frequency = 0x989680L;
tickFrequency = 1.0;
}
else
{
IsHighResolution = true;
tickFrequency = 10000000.0;
tickFrequency /= (double) Frequency;
}
}
en MSDN que dice acerca de QueryPerformanceFrequency
:
Recupera la frecuencia del contador de rendimiento de alta resolución, si existe
Es bastante claro, sin embargo, cuando se hace exactamente lo ¿existe? Sospecho que generalmente existe en las máquinas actuales, pero ¿cuándo exactamente no?
Es interesante porque cuando no existe, Stopwatch
se convierte en una mera envoltura alrededor de la propiedad DateTime.UtcNow
.
No he encontrado una máquina si aún no existe. El principal problema práctico al que me enfrento son los errores en su comportamiento causados por el hardware defectuoso. Por ejemplo, el tiempo puede saltar adelante/atrás a medida que el hilo se programa en diferentes núcleos, .. – CodesInChaos
Es opcional en Windows Mobile, hasta que el creador de plataformas lo implemente. –
Las propiedades "IsHighResolution" y "Frequency" de esta clase deberían responder esta pregunta. Nota: Encontré una frecuencia de cero en una máquina virtual [VMWare ESX, pero no recuerdo la versión] que ya no aparece [la máquina se migró de w2k3 a w2k8, por lo que podría haber sido VMWare o Windows :-) ] br ++ mabra – mabra