Was ist der Beste Weg, um zu berechnen Zeitspanne
In meinem c# - Programm, meine Forderung ist zu berechnen, eine Zeitspanne, die für die Geschäftslogik Ausführung innerhalb einer foreach-Schleife habe ich zum speichern Zeitspanne.
Ich bin mit dem folgenden code
for (int i = 0; i < 100; i++)
{
DateTime start= DateTime.Now;
//Business logic
DateTime end= DateTime.Now;
TimeSpan time = start.Subtract(end);
//Save timespan in log file
}
Bitte korrigieren Sie mich, ob ich mich mit richtigen code, oder muss ich ändern für eine bessere Leistung und Ergebnis.
Ich glaube, Sie mehr daran interessiert wären, Stoppuhr
Mit
Möglich, Duplikat der DateTime Ist.Jetzt ist der beste Weg, um zu Messen die eine Funktion der Leistung?
Mit
DateTime.Now
statt DateTime.UtcNow
ist fast nie das richtige zu tun (aber die Stoppuhr ist in diesem Fall besser sowieso).Möglich, Duplikat der DateTime Ist.Jetzt ist der beste Weg, um zu Messen die eine Funktion der Leistung?
InformationsquelleAutor Hemant Kothiyal | 2011-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie eine
Stoppuhr
. DieStopwatch
ist viel genauer für die Messung Zeit, als die wall-time-clock.InformationsquelleAutor Albin Sunnanbo
Die einfachste Möglichkeit wäre:
Alternativ können Sie verwenden Sie eine Stoppuhr, die liefert genauere Ergebnisse. Sehen http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx, wie das arbeiten mit einer Stoppuhr.
InformationsquelleAutor Pieter van Ginkel
Wie es aussieht, sind Sie mit der Zeitspanne, um die Leistung zu Messen. Dein code ist in Ordnung, allerdings sollten Sie sich bewusst sein, dass DateTimes sind nur so präzise sein (etwa 10-15ms auf den meisten Maschinen -- siehe die "Nutzlosen Timer-Mechanismus", Abschnitt hier für eine Erklärung).
DateTimes sind auch nicht zusammenhängend sein; was ist, wenn der erste DateTime abgerufen wird, kurz bevor die Sommerzeit kommt, und die letztere nur nach? Eine operation, die dauert eine Sekunde angezeigt werden könnten als unter einer Stunde, oder sogar eine negative Zeit. Auch mit alle Zeiten in UTC, gibt es mögliche Probleme, wenn der Benutzer ändert die Zeit manuell oder Sprünge verursacht, die durch den computer gehen zu schlafen und aufwachen, etc.
Bessere alternative wäre, um die
Stoppuhr
Klasse, die ausgelegt ist für diese Art der Sache und verwendet ein high-precision timer intern (über dieQueryPerformanceCounter()
Win32-Funktion).InformationsquelleAutor Cameron
Zu beantworten, follow-up-Fragen, (1) Sie sind richtig, brauchen Sie nicht zu instanziieren einer Stoppuhr jeder iteration. Sie müssen nur mit dem restart-Methode, etwa so:
(2) würden Sie wahrscheinlich haben, um zu schreiben ein paar Zeilen code, um den Rückgabewert in Sekunden, wenn Sie weniger als eine minute und Minuten, wenn größer als, aber hier wäre ein Beispiel, das zu tun (nehme an, dies ist die Zeile direkt nach dem speichern die Zeitspanne aus dem obigen Beispiel):
In diesem Beispiel wird ein Ternärer Operator zu speichern, die ganze Zahl für die Anzahl der Minuten oder Sekunden.
InformationsquelleAutor Aaron Deming