Ho trovato un buon question per la misurazione delle prestazioni funzione e le risposte consiglia di utilizzare cronometro come segueBest Practice for Cronometro in macchina multi processori?
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Ma è valida se si esegue in più macchina processori? il thread può essere passato a un altro processore, vero? Anche la stessa cosa dovrebbe essere in Enviroment.TickCount. Se la risposta è sì devo avvolgere il mio codice all'interno BeginThreadAffinity come segue
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
PS
La commutazione può avvenire attraverso il livello filo non solo il livello di processore, per esempio se la funzione è in esecuzione in un altro thread in modo che il sistema possa passare a un altro processore, se ciò accade, il cronometro sarà valido dopo questa commutazione?
non sto usando cronometro per misurare perfromance solo ma anche per simulare funzione timer utilizzando Thread.Sleep (per evitare sovrapposizioni call)
se la funzione è in esecuzione in un thread in background, questo significa che il thread della funzione può passare a un altro processore che porta all'errore nelle misurazioni –
Secondo MSDN: "I thread in background sono identici ai thread in primo piano, eccetto che i thread in background non impedire che un processo termini ". Rif: http: // msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx –
@Tormod Fjeldskår, i thread in primo piano/sfondo possono essere passati ad altri processori quindi non mi interessa il suo tipo ma l'ho menzionato nel mio commento per esempio non di più –