Per esperienza personale, la System.Diagnostics.Stopwatch
classe può essere utilizzata per misurare i tempi di esecuzione di un metodo, tuttavia, ATTENZIONE : non è del tutto esatto!
Considera il seguente esempio:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Risultati di esempio
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
Ora ti stai chiedendo; "beh, perché ci sono voluti 132ms la prima volta e significativamente meno il resto del tempo?"
La risposta è che Stopwatch
non compensa l'attività di "rumore di fondo" in .NET, come JITing. Pertanto, la prima volta che si esegue il metodo, .NET JIT è il primo. Il tempo necessario per farlo viene aggiunto al tempo dell'esecuzione. Allo stesso modo, anche altri fattori possono variare i tempi di esecuzione.
Quello che dovresti davvero cercare con assoluta precisione è Performance Profiling !
Dai un'occhiata a quanto segue:
RedGate ANTS Performance Profiler è un prodotto commerciale, ma produce risultati molto precisi. - Aumenta le prestazioni delle tue applicazioni con il profilo .NET
Ecco un articolo StackOverflow sulla profilazione: - Quali sono alcuni buoni profilatori .NET?
Ho anche scritto un articolo sulla profilazione delle prestazioni usando il cronometro che potresti voler guardare - Profili delle prestazioni in .NET
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
interno, ma il cronometro si ferma prima che tutto sia fatto.