Il titolo è praticamente auto-esplicativo, mi sto uccidendo per questa semplicità.Qual è l'equivalente di System.nanoTime() in .NET?
Sembra here, ma non è molto utile.
Il titolo è praticamente auto-esplicativo, mi sto uccidendo per questa semplicità.Qual è l'equivalente di System.nanoTime() in .NET?
Sembra here, ma non è molto utile.
Penso che la classe Stopwatch sia ciò che stai cercando.
DateTime.Now
ti darà l'ora corrente in millisecondi, ma il tempo che è accurato in nanosecondi è abbastanza poco pratico, almeno in Windows.
Credo che la precisione di DateTime.Ora sia ~ 15 o 20 millisecondi. Ha più precisione di precisione. – snarf
la cosa più vicina che ho trovato è il metodo DateTime.ToFileTime(). è possibile chiamare questo su un'istanza di un DateTime in questo modo:
long starttime = DateTime.Now.ToFileTime()
Il metodo restituisce un ora di file di Windows:
tempo di fileUn Windows è un valore a 64 bit che rappresenta il numero di 100 Intervallo di -nanosecondi che sono trascorsi dalle 12:00 a mezzanotte, 1 gennaio 1601 d.C. (CE) Coordinated Universal Time (UTC).
si potrebbe almeno tempo a intervalli di 100 ns con esso.
src: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx
Questo ti dà solo 100 ns di precisione per il tempo dell'ultimo aggiornamento del timer di Windows, che avviene ogni 15 - 16 ms – overstood
ok, solo per curiosità di quali informazioni provengono? –
credo che tu stia andando a colpire i limiti rigidi del sistema operativo se si sta temporizzazione in nanosecondi. Ecco un buon articolo sul tema:
http://www.lochan.org/2005/keith-cl/useful/win32time.html
Mentre Windows sarà lieto di tornare al 100 accuratezza nanosecondo, l'orologio è garantita solo per aggiornare una volta ogni 15,6 millisecondi o giù di lì. In modo efficace, Windows restituisce l'ora in cui tali aggiornamenti si sono verificati con una precisione di 100 nanosecondi. Per una precisione maggiore di questo, probabilmente devi essere pronto a scrivere C o assemblatore ed eseguire sistemi operativi embedded.
http://msdn.microsoft.com/de-de/library/system.datetime.ticks.aspx
somelike: DateTime.Ticks
DateTime.Now.Ticks
stavo cercando di trovare la risposta a questo per eseguire alcuni test delle prestazioni.
DateTime startTime = DateTime.Now;
generatorEntity.PopulateValueList();
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks);
Se si desidera un timestamp da confrontare tra processi diversi, lingue diverse (Java, C, C#), sotto GNU/Linux e Windows (Seven almeno):
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 di 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;
}
C#:
private static long nanoTime() {
long nano = 10000L * Stopwatch.GetTimestamp();
nano /= TimeSpan.TicksPerMillisecond;
nano *= 100L;
return nano;
}
+1, Per temporizzazione (vs. ottenere il tempo assoluto), cronometro è. – orip
Il cronometro è sicuramente il modo migliore per cronometrare le cose nel BCL, non è esattamente accurato ai nanosecondi. – overstood
@overtified: Sì, la precisione non è inferiore a nanosecondi, proprio come il metodo nanoTime. :) – Guffa