2009-10-11 7 views

Respuesta

23

Creo que la clase Stopwatch es lo que estás buscando.

+0

+1, Para temporización (vs. obteniendo el tiempo absoluto), Cronómetro es eso. – orip

+2

Cronómetro es definitivamente la mejor manera de cronometrar cosas en el BCL, simplemente no es preciso en nanosegundos. – overstood

+3

@overstood: Sí, la precisión no se reduce a nanosegundos, al igual que el método nanoTime. :) – Guffa

1

DateTime.Now le dará la hora actual en milisegundos, pero el tiempo que es preciso para nanosegundos es bastante poco práctico, al menos en Windows.

+1

Creo que la precisión de DateTime.Now es ~ 15 o 20 milisegundos. Tiene más precisión que precisión. – snarf

1

lo más parecido que pude encontrar es el método DateTime.ToFileTime(). puede llamar a esto en una instancia de un DateTime de este modo:

long starttime = DateTime.Now.ToFileTime() 

El método devuelve un tiempo de archivos de Windows:

tiempo de archivo

Un Windows es un valor de 64 bits que representa el número de 100 -nosegundos intervalos que han transcurrido desde las 12:00 de la medianoche del 1 de enero de 1601 AD (CE) Hora universal coordinada (UTC).

puede al menos tiempo hasta intervalos de 100 ns con él.

src: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx

+0

Esto solo le da 100 ns de precisión para el momento de la última actualización del temporizador de Windows, que ocurre cada 15 a 16 ms – overstood

+2

¿está bien, solo por curiosidad de dónde viene esa información? –

-1

creo que va a golpear los límites duros del sistema operativo si está temporización en nanosegundos. He aquí un buen artículo sobre el tema:

http://www.lochan.org/2005/keith-cl/useful/win32time.html

Mientras que Windows estará feliz de regresar 100 precisión de nanosegundos, el reloj sólo se garantiza para actualizar una vez cada 15,6 milisegundos o menos. Entonces efectivamente, Windows devuelve el tiempo en que esas actualizaciones ocurrieron con una precisión de 100 nanosegundos. Para obtener más precisión, probablemente tenga que estar preparado para escribir C o ensamblar, ejecutar y SO incorporado.

1

DateTime.Now.Ticks

yo estaba tratando de encontrar la respuesta a esto para ejecutar algunas pruebas de rendimiento.

DateTime startTime = DateTime.Now; 
generatorEntity.PopulateValueList(); 
TimeSpan elapsedTime = DateTime.Now - startTime; 
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks); 
2

Si desea una marca de tiempo que desee comparar entre los diferentes procesos, diferentes lenguajes (Java, C, C#), bajo GNU/Linux y Windows (siete por lo menos):

Java:

java.lang.System.nanoTime(); 

C de GNU/Linux:

static int64_t hpms_nano() { 
    struct timespec t; 
    clock_gettime(CLOCK_MONOTONIC, &t); 
    int64_t nano = t.tv_sec; 
    nano *= 1000; 
    nano *= 1000; 
    nano *= 1000; 
    nano += t.tv_nsec; 
    return nano; 
} 

Windows C:

static int64_t hpms_nano() { 
    static LARGE_INTEGER ticksPerSecond; 
    if(ticksPerSecond.QuadPart == 0) { 
     QueryPerformanceFrequency(&ticksPerSecond); 
    } 
    LARGE_INTEGER ticks; 
    QueryPerformanceCounter(&ticks); 
    uint64_t nano = (1000*1000*10UL * ticks.QuadPart)/ticksPerSecond.QuadPart; 
    nano *= 100UL; 
    return nano; 
} 

C#:

private static long nanoTime() { 
    long nano = 10000L * Stopwatch.GetTimestamp(); 
    nano /= TimeSpan.TicksPerMillisecond; 
    nano *= 100L; 
    return nano; 
} 
Cuestiones relacionadas