Die Laufgeschwindigkeit der Software muss in einem für den Benutzer akzeptablen Bereich liegen. Oft führt die Verbesserung der Geschwindigkeit dieser kurzlebigen, aber häufig verwendeten Routinen zu einer erheblichen Steigerung der Gesamtgeschwindigkeit der Software.
Um die Geschwindigkeit zu verbessern, muss man natürlich zunächst die Zeit messen können. Okay, dann betrachten wir die Situation auf der Strecke. Sobald der Schuss ertönt, drücken Sie die Stoppuhr, um die Zeitmessung zu starten, und beenden Sie die Zeitmessung, wenn der Spieler die Ziellinie erreicht . Vor Beginn der nächsten Runde muss die Stoppuhr auf Null zurückgesetzt werden. .NET2.0 bietet auch eine solche Stoppuhr: Stopwatch-Klasse, mit der die Zeit genauer gemessen werden kann.
Geschwindigkeitstest:
Softwareleistung und Testbarkeit sind ein komplexes Thema. Um sicherzustellen, dass eine Anwendung die Erwartungen der Benutzer erfüllt, müssen ihre Leistung und Testbarkeit während des Entwicklungszyklus berücksichtigt werden. Dies ist während der Designphase von entscheidender Bedeutung, da ein schlechtes Design mit ziemlicher Sicherheit zu einer schlechten Benutzererfahrung führen wird. Gutes Design allein garantiert jedoch nicht, dass das Programm effizient läuft. Die Qualität des endgültigen Codes ist ebenso wichtig.
Das Messen einer lang laufenden Routine ist ziemlich einfach. Dauert ein Vorgang mehrere Minuten, kann die Zeit mit einer Uhr erfasst werden. Beispielsweise kann bei einem Prozess, dessen Ausführung zwei Minuten dauert, durch eine Verbesserung um 10 % eine Einsparung von 12 Sekunden erzielt werden, was leicht zu ermitteln ist.
Und wenn Sie einen sehr kurzfristigen Prozess messen möchten, müssen Sie eine höhere Genauigkeit in Betracht ziehen. Beispielsweise gibt es einige sehr kleine Routinen, deren Ausführung möglicherweise nur eine Tausendstelsekunde dauert, die aber 1 Million Mal aufgerufen werden. Der kumulative Effekt ist offensichtlich. In früheren Versionen des .NET Frameworks mussten Sie Windows-API-Funktionen verwenden, und in .NET Framework 2.0 führte Microsoft die Stopwatch-Klasse (unsere Stoppuhr) ein, um Zeitmessaufgaben zu vereinfachen.
Stoppuhr-Klasse:
Die Verwendung der Stopwatch-Klasse zum Messen der Zeit ist sehr einfach. Wie Stoppuhren im wirklichen Leben können auch Objekte dieser Klasse den Zähler starten, stoppen und auf Null zurücksetzen (zurücksetzen), aber sie sind viel genauer als gewöhnliche Stoppuhren. Sie können auf Mikrosekunden (d. h. Millionen von Sekunden) genau sein. . Bruchteil einer Sekunde).
Beispielcode:
Um die Verwendung von Stopwatch zu demonstrieren, verwenden wir einen Code. Hier ist eine Konsolenanwendung, die alle Ganzzahlen zwischen 1 und 1 Million akkumuliert:
using System;
Namespace StopWatchClass
{
Klassenprogramm
{
static void Main(string[] args)
{
long total = 0;
for (int i = 1; i <= 10000000; i++)
{
insgesamt += i;
}
}
}
}
Stoppuhrobjekt hinzufügen:
Die Stopwatch-Klasse befindet sich im System.Diagnostics-Namespace. Hier ist der Code nach dem Hinzufügen des Objekts:
Verwenden des Systems;
mit System.Diagnostics;
Namespace StopWatchClass
{
Klassenprogramm
{
static void Main(string[] args)
{
Stoppuhr-Timer = new Stopwatch();
long total = 0;
for (int i = 1; i <= 10000000; i++)
{
insgesamt += i;
}
}
}
}
Steuern Sie das Stopwatch-Objekt:
Stopwatch bietet mehrere Methoden zur Steuerung des Stopwatch-Objekts. Die Start-Methode startet einen Zeitmessvorgang und die Stop-Methode stoppt die Zeitmessung. Wenn zu diesem Zeitpunkt die Startmethode zum zweiten Mal verwendet wird, wird die Zeitmessung fortgesetzt und das endgültige Zeitmessungsergebnis ist die Akkumulation der beiden Zeitmessungen. Um diese Situation zu vermeiden, verwenden Sie die Reset-Methode, um das Objekt vor dem zweiten Timer auf Null zurückzusetzen. Keine dieser drei Methoden erfordert Parameter. Der Code lautet:
Verwenden des Systems;
mit System.Diagnostics;
Namespace StopWatchClass
{
Klassenprogramm
{
static void Main(string[] args)
{
Stoppuhr-Timer = new Stopwatch();
long total = 0;
timer.Start();
for (int i = 1; i <= 10000000; i++)
{
insgesamt += i;
}
timer.Stop();
}
}
}
Lesen Sie die Ergebnisse der Stoppuhr:
<!--[if !supportLists]--><!--[endif]--> Nach Beendigung der Zeitmessung besteht der nächste Schritt darin, die Zeitmessungsergebnisse zu lesen. Die Stopwatch-Klasse stellt die folgenden Eigenschaften bereit:
<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->
Elapsed: Gibt ein TimeSpan-Objekt zurück, das das Zeitintervall darstellt.
ElapsedMilliseconds: Gibt die Anzahl der Mikrosekunden zurück, die von der Zeitmessung verstrichen sind. Die Genauigkeit ist etwas geringer, geeignet für eine etwas längere Zeitmessung.
ElapsedTicks: Gibt die Anzahl der verstrichenen Timer-Ticks zurück. Ein Timer-Tick ist die kleinstmögliche Maßeinheit für ein Stoppuhrobjekt. Die Länge des Timer-Ticks wird vom jeweiligen Computer und Betriebssystem bestimmt. Der Wert des statischen Felds Frequency des Stopwatch-Objekts stellt die Anzahl der Timer-Ticks dar, die in einer Sekunde enthalten sind. Beachten Sie den Unterschied in den Zeiteinheiten, die von der Ticks-Eigenschaft des TimeSpan verwendet werden.
Eine dieser Eigenschaften sollte basierend auf der Timing-Aufgabe ausgewählt werden. In unserem Beispielprogramm liefert die Elapsed-Eigenschaft die erforderliche Genauigkeit, um die Anzahl der verstrichenen Mikrosekunden auszugeben. Dies ist auch die höchste Genauigkeit von TimeSpan.
Hier ist der endgültige Programmcode:
Verwenden des Systems;
mit System.Diagnostics;
Namespace StopWatchClass
{
Klassenprogramm
{
static void Main(string[] args)
{
Stoppuhr-Timer = new Stopwatch();
long total = 0;
timer.Start();
for (int i = 1; i <= 10000000; i++)
{
insgesamt += i;
}
timer.Stop();
dezimal micro = timer.Elapsed.Ticks / 10m;
Console.WriteLine("Ausführungszeit betrug {0:F1} Mikrosekunden.", micro);
}
}
}
Verwenden Sie außerdem die IsRunning-Eigenschaft, um zu überprüfen, ob eine Stopwatch-Instanz eine Zeitmessung durchführt, und verwenden Sie die StartNew-Methode, um einen neuen Timer zu starten.