Anforderungen: Im Entwicklungsprozess können dieselben beiden Funktionsmethoden unsere Anforderungen erfüllen, aber aus Leistungsgründen wählen wir die beste Leistungsmethode für den Aufruf. Wie testen wir die Leistung des Codes?
Performance Benchmarking kann Programmierern helfen, die Leistung von zwei Codeschnippeln oder Methoden zu vergleichen, was einen guten Quantifizierungsstandard für Code-Neuschreiben oder Refaktorisierung bieten kann. Ohne Leistungsbenchmarks ist es schwer vorstellbar, wie man mit bloßem Auge den Unterschied in der Performance erkennen kann, wenn man Methode A zu Methode B wechselt.
BenchmarkDotNet ist eine leistungsstarke .Net-Leistungs-Benchmark-Bibliothek auf der offiziellen WebsiteDer Hyperlink-Login ist sichtbar.
Zuerst erstellen wir ein neues .NET Core 3.1-Konsolenprojekt. Der Projektname lautet: BenchmarkTest
Installiere BenchmarkDotNet mit dem Nuget-Befehl, der Code ist wie folgt:
Doppelklicken Sie auf das Projekt, um die Zielplattform des Projekts wie folgt zu verändern:
Wir testen die Leistung der Methoden TestMD5 und TestSHA1 unter den Frameworks .NET Framework 4.7.2 bzw. .NET Core 3.1.
Der Code lautet wie folgt:
Versuchen Sie, es mit folgendem Fehler auszuführen:
Validierung von Benchmarks: Assembly BenchmarkTest, das Benchmarks definiert, ist nicht optimiert Der Benchmark wurde ohne aktivierte Optimierung gebaut (höchstwahrscheinlich eine DEBUG-Konfiguration). Bitte baue es in RELEASE auf. Wenn du die Benchmarks debuggen möchtest, siehe bitteDer Hyperlink-Login ist sichtbar.
Schalte das Projekt in den RELEASE-Modus umUm das Projekt erneut zu starten, wie unten gezeigt:
* Zusammenfassung *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November 2018Update/19H2) Intel Core i5-8259U CPU 2,30 GHz (Coffee Lake), 1 CPU, 8 logische und 4 physische Kerne .NET Core SDK=5.0.103 [Host] : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT .NET 4.7.2 : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT .NET Core 3.1 : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT
| Methode | Job | Laufzeit | Mean | Fehler | StdDev | Min | Max | Median | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 US | 0.0804 US | 0,1045 US | 3.958 US | 4.318 US | 4.123 US | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 US | 0,0793 us | 0,1085 US | 3,926 US | 4.289 US | 4.003 US | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 US | 0,0122 US | 0.0114 us | 1.202 US | 1.238 US | 1.214 US | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 US | 0.0186 US | 0.0165 US | 1.284 USA | 1.336 US | 1.307 US |
* Hinweise * Ausreißer TestContext.TestSHA1: .NET 4.7.2 -> 1 Ausreißer wurde entfernt (5,52 US) TestContext.TestSHA1: .NET Core 3.1 -> 1 Ausreißer wurde entfernt (1.37 US)
* Legenden * Mittelwert: Arithmetischer Mittelwert aller Messungen Fehler: Hälfte des 99,9%-Konfidenzintervalls StdDev: Standardabweichung aller Messungen Min: Minimum Max: Maximum Median: Wert, der die obere Hälfte aller Messungen trennt (50. Perzentil) 1 US: 1 Mikrosekunde (0,000001 Sek)
***** BenchmarkRunner: Ende ***** ** Es gab noch 0 Benchmark(s) zu laufen ** Laufzeit: 00:01:14 (74 Sekunden), ausgeführte Benchmarks: 4
Globale Gesamtzeit: 00:01:20 (80,63 Sekunden), ausgeführte Benchmarks: 4 * Artefakt-Aufräumen * Nach der Ausführung werden die Testergebnisse in unserem Projektordner \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results in CSV-, HTML-, MD- und anderen Formaten gespeichert.
Anmerkung:Die Auswahl des SimpleJob-Zielframes ist falsch und kann nicht korrekt ausgeführt werdenFolgendermaßen:
Ich habe parallel nicht gebaut und bin auf einen sequentiellen Build umgestiegen
Betriebsmittel:Der Hyperlink-Login ist sichtbar.
|