El título es casi autoexplicativo, me estoy matando por esta simplicidad.¿Cuál es el equivalente a System.nanoTime() en .NET?
Parecido here, pero no es de mucha ayuda.
El título es casi autoexplicativo, me estoy matando por esta simplicidad.¿Cuál es el equivalente a System.nanoTime() en .NET?
Parecido here, pero no es de mucha ayuda.
Creo que la clase Stopwatch es lo que estás buscando.
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.
Creo que la precisión de DateTime.Now es ~ 15 o 20 milisegundos. Tiene más precisión que precisión. – snarf
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 archivoUn 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
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
¿está bien, solo por curiosidad de dónde viene esa información? –
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.
http://msdn.microsoft.com/de-de/library/system.datetime.ticks.aspx
somelike: DateTime.Ticks
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);
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;
}
+1, Para temporización (vs. obteniendo el tiempo absoluto), Cronómetro es eso. – orip
Cronómetro es definitivamente la mejor manera de cronometrar cosas en el BCL, simplemente no es preciso en nanosegundos. – overstood
@overstood: Sí, la precisión no se reduce a nanosegundos, al igual que el método nanoTime. :) – Guffa