απαιτήσεις: Στη διαδικασία ανάπτυξης, οι ίδιες δύο μέθοδοι λειτουργίας μπορούν να ικανοποιήσουν τις απαιτήσεις μας, αλλά για λόγους απόδοσης, θα επιλέξουμε την καλύτερη μέθοδο απόδοσης για κλήση, πώς να ελέγξουμε την απόδοση του κώδικα;
Η συγκριτική αξιολόγηση απόδοσης μπορεί να βοηθήσει τους προγραμματιστές να συγκρίνουν την απόδοση δύο αποσπασμάτων κώδικα ή μεθόδων, οι οποίες μπορούν να παρέχουν ένα καλό πρότυπο ποσοτικοποίησης για την επανεγγραφή ή την ανακατασκευή κώδικα. Χωρίς σημεία αναφοράς απόδοσης, είναι δύσκολο να φανταστεί κανείς πώς μπορείτε να διακρίνετε τη διαφορά στην απόδοση με γυμνό μάτι όταν αλλάζετε τη μέθοδο Α στη μέθοδο Β.
Το BenchmarkDotNet είναι μια ισχυρή βιβλιοθήκη συγκριτικής αξιολόγησης απόδοσης .Net στον επίσημο ιστότοποΗ σύνδεση με υπερσύνδεσμο είναι ορατή.
Αρχικά, θα δημιουργήσουμε ένα νέο έργο κονσόλας .NET Core 3.1. Το όνομα του έργου είναι: BenchmarkTest
Εγκαταστήστε το BenchmarkDotNet χρησιμοποιώντας την εντολή nuget, ο κώδικας έχει ως εξής:
Κάντε διπλό-κλικ στη μελέτη για να τροποποιήσετε την πλατφόρμα προορισμού της μελέτης, ως εξής:
Δοκιμάζουμε την απόδοση των μεθόδων TestMD5 και TestSHA1 στα πλαίσια .NET Framework 4.7.2 και .NET Core 3.1, αντίστοιχα.
Ο κωδικός έχει ως εξής:
Προσπαθήστε να το εκτελέσετε με το ακόλουθο σφάλμα:
Επικύρωση σημείων αναφοράς: Το Assembly BenchmarkTest που ορίζει τα σημεία αναφοράς δεν είναι βελτιστοποιημένο Το Benchmark δημιουργήθηκε χωρίς ενεργοποιημένη τη βελτιστοποίηση (πιθανότατα μια διαμόρφωση DEBUG). Παρακαλώ, δημιουργήστε το στο RELEASE. Εάν θέλετε να διορθώσετε τα σημεία αναφοράς, ανατρέξτε στην ενότηταΗ σύνδεση με υπερσύνδεσμο είναι ορατή.
Αλλάξτε το έργο σε λειτουργία RELEASEγια να ξεκινήσετε ξανά το έργο, όπως φαίνεται παρακάτω:
* Περίληψη *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/Νοέμβριος 2018Ενημέρωση/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 CPU, 8 λογικοί και 4 φυσικοί πυρήνες .NET Core SDK=5.0.103 [Κεντρικός υπολογιστής] : .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
| Μέθοδος | Εργασία | Χρόνος εκτέλεσης | Μέσος όρος | Σφάλμα | StdDev | Λεπτά | Μέγιστο | Διάμεσος | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | ΔοκιμήMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 ΗΠΑ | 0,0804 ΗΠΑ | 0,1045 ΗΠΑ | 3.958 ΗΠΑ | 4.318 ΗΠΑ | 4.123 ΗΠΑ | | Δοκιμή SHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 ΗΠΑ | 0,0793 ΗΠΑ | 0,1085 ΗΠΑ | 3.926 ΗΠΑ | 4.289 ΗΠΑ | 4.003 ΗΠΑ | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 ΗΠΑ | 0,0122 ΗΠΑ | 0,0114 ΗΠΑ | 1.202 ΗΠΑ | 1.238 ΗΠΑ | 1.214 ΗΠΑ | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 ΗΠΑ | 0,0186 ΗΠΑ | 0,0165 ΗΠΑ | 1.284 ΗΠΑ | 1.336 ΗΠΑ | 1.307 ΗΠΑ |
* Συμβουλές * Ακραίες τιμές TestContext.TestSHA1: .NET 4.7.2 -> 1 ακραία τιμή αφαιρέθηκε (5.52 us) TestContext.TestSHA1: Καταργήθηκε η ακραία τιμή .NET Core 3.1 -> 1 (1,37 ΗΠΑ)
* Θρύλοι * Μέσος όρος : Αριθμητικός μέσος όρος όλων των μετρήσεων Σφάλμα: Το ήμισυ του διαστήματος εμπιστοσύνης 99,9% StdDev : Τυπική απόκλιση όλων των μετρήσεων Ελάχιστο : Ελάχιστο Μέγιστο : Μέγιστο Διάμεσος : Τιμή που διαχωρίζει το υψηλότερο ήμισυ όλων των μετρήσεων (50ό εκατοστημόριο) 1 us : 1 μικροδευτερόλεπτο (0,000001 δευτ.)
***** BenchmarkRunner: Τέλος ***** ** Παρέμειναν 0 σημεία αναφοράς για εκτέλεση ** Διάρκεια: 00:01:14 (74 δευτ.), εκτελεσμένα σημεία αναφοράς: 4
Συνολικός χρόνος παγκοσμίως: 00:01:20 (80.63 sec), εκτελεσμένα σημεία αναφοράς: 4 * Καθαρισμός αντικειμένων * Μόλις εκτελεστούν, τα αποτελέσματα των δοκιμών αποθηκεύονται στο φάκελο του έργου μας \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, σε csv, html, md και άλλες μορφές.
Σημείωση:Η επιλογή πλαισίου προορισμού του SimpleJob είναι λανθασμένη και ενδέχεται να μην εκτελεστεί σωστάΩς εξής:
Απέτυχε η παράλληλη κατασκευή, μετάβαση σε διαδοχική κατασκευή
Πόροι:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
|