fand ich eine gute question für Funktionsleistung zu messen, und die Antworten empfehlen Stoppuhr zu verwenden, wieBest Practice für Stoppuhr in Multi-Prozessoren-Maschine?
folgtStopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Aber gilt dies, wenn Sie unter mehreren Prozessoren Computer ausgeführt werden? Der Thread kann auf einen anderen Prozessor umgeschaltet werden, oder? Auch das gleiche sollte in Enviroment.TickCount sein. Wenn die Antwort ja sollte ich meinen Code in BeginThreadAffinity wickeln als
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
PS folgt
Die Umschaltung der Thread-Ebene auftreten, können die Prozessorebene nicht nur zum Beispiel, wenn die Funktion in einem anderen läuft thread so das System kann es zu einem anderen Prozessor wechseln, wenn das passiert, wird die Stoppuhr nach diesem Wechsel gültig sein?
Ich bin nicht Stoppuhr für perfromance Messung mit nur aber auch Timer-Funktion Thread.Sleep (verhindern Anruf überlappend)
Wenn die Funktion in einem Hintergrundthread ausgeführt wird, bedeutet dies, dass der Funktions-Thread zu einem anderen Prozessor wechseln kann, der zu einem Fehler in den Messungen führt –
Nach MSDN: "Hintergrundthreads sind identisch mit Vordergrundthreads, außer dass Hintergrundthreads nicht verhindern, dass ein Prozess beendet wird. " Ref: http: // msdn.microsoft.com/de-de/library/system.threading.thread.isbackground.aspx –
@Tormod Fjeldskår, Vordergrund-/Hintergrund-Threads können auf andere Prozessoren umgestellt werden, daher ist mir der Typ egal, aber ich habe es in meinem Kommentar erwähnt Beispiel nicht mehr –