2009-10-11 12 views

risposta

23

Penso che la classe Stopwatch sia ciò che stai cercando.

+0

+1, Per temporizzazione (vs. ottenere il tempo assoluto), cronometro è. – orip

+2

Il cronometro è sicuramente il modo migliore per cronometrare le cose nel BCL, non è esattamente accurato ai nanosecondi. – overstood

+3

@overtified: Sì, la precisione non è inferiore a nanosecondi, proprio come il metodo nanoTime. :) – Guffa

1

DateTime.Now ti darà l'ora corrente in millisecondi, ma il tempo che è accurato in nanosecondi è abbastanza poco pratico, almeno in Windows.

+1

Credo che la precisione di DateTime.Ora sia ~ 15 o 20 millisecondi. Ha più precisione di precisione. – snarf

1

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 file

Un 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

+0

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

+2

ok, solo per curiosità di quali informazioni provengono? –

-1

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.

1

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); 
2

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