nanoseconds c# java .net nanotime

c# - nanoseconds - system get nanotime java



¿Cuál es el equivalente a System.nanoTime() en.NET? (7)

El título es bastante autoexplicativo, me estoy matando por esta simplicidad.

Miré here , pero no es de mucha ayuda.


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


Creo que vas a llegar a los límites duros del sistema operativo si estás cronometrando en nanosegundos. Aquí hay un buen artículo sobre el tema:

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

Si bien Windows con gusto devolverá una precisión de 100 nanosegundos, solo se garantiza que el reloj se actualizará una vez cada 15,6 milisegundos aproximadamente. Entonces, efectivamente, Windows devuelve el tiempo en que esas actualizaciones ocurrieron con una precisión de 100 nanosegundos. Para obtener más precisión que esta, probablemente deba estar preparado para escribir C o ensamblador y ejecutar un sistema operativo integrado.


DateTime.Now.Ticks

Estaba tratando de encontrar la respuesta a esta para ejecutar algunas pruebas de rendimiento.

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


Lo más cercano que pude encontrar es el método DateTime.ToFileTime (). puedes llamar a esto en una instancia de un DateTime como:

long starttime = DateTime.Now.ToFileTime()

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

Un tiempo de archivo de Windows es un valor de 64 bits que representa el número de intervalos de 100 nanosegundos que han transcurrido desde las 12:00 de la medianoche del 1 de enero de 1601 AD (CE) Tiempo Universal Coordinado (UTC).

Podrías por lo menos bajar a intervalos de 100 ns con él.

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


Si desea que se compare una marca de tiempo entre diferentes procesos, diferentes lenguajes (Java, C, C #), bajo GNU / Linux y Windows (siete como mínimo):

Java:

java.lang.System.nanoTime();

C 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; }

C Windows:

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; }

DO#:

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



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