Προγραμματισμός

Πώς να γράψετε δοκιμές απόδοσης χρησιμοποιώντας το NBench

Όταν εργάζεστε με εφαρμογές, θα θελήσετε συχνά να γνωρίζετε την κατανομή μνήμης, τη γενική συλλογή απορριμμάτων (GC) και την απόδοση του κώδικα. Η εφαρμογή σας μπορεί να είναι αργή ή να καταναλώνει πολλούς πόρους και θέλετε να μάθετε τι συμβαίνει.

Παρόλο που μπορείτε να εντοπίσετε λειτουργικά προβλήματα και ελαττώματα κώδικα χρησιμοποιώντας δοκιμές μονάδας και κριτικές κώδικα, ίσως χρειαστείτε ακόμα έναν τρόπο για να απομονώσετε προβλήματα απόδοσης. Εδώ είναι το NBench χρήσιμο. Αυτό το άρθρο παρουσιάζει μια συζήτηση για το NBench και πώς μπορούμε να το χρησιμοποιήσουμε για να γράψουμε δοκιμές απόδοσης για εφαρμογές .NET.

Τι είναι το NBench; Γιατί να το χρησιμοποιήσω;

Το NBench είναι ένα δημοφιλές πλαίσιο δοκιμών απόδοσης που μπορεί να χρησιμοποιηθεί για τον προσδιορισμό της απόδοσης των μεθόδων στην εφαρμογή μας. Το NBench μπορεί να μετρήσει την απόδοση του κώδικα της εφαρμογής σας, την κατανομή μνήμης και τα γενικά έξοδα GC που εμπλέκονται στην ανάκτηση μνήμης, καθαρίζοντας ανεπιθύμητα αντικείμενα.

Μπορείτε να αξιοποιήσετε το NBench για να "δοκιμάσετε τη μονάδα" την απόδοση της εφαρμογής σας με τον ίδιο τρόπο που γράφετε δοκιμές μονάδας χρησιμοποιώντας τα πλαίσια XUnit ή NUnit. Αυτό που μου αρέσει περισσότερο στο NBench είναι ότι μπορεί να ενσωματωθεί στον αγωγό κατασκευής σας. Και παρόλο που το NBench έχει το δικό του δρομέα, μπορείτε ακόμα να εκτελέσετε το NBench χρησιμοποιώντας NUnit ή Resharper Είναι σαν να εκτελείτε τις δοκιμές μονάδας σας.

Το NBench διανέμεται ως πακέτο NuGet. Υποθέτοντας ότι το Visual Studio είναι ήδη εγκατεστημένο στο σύστημά σας, μπορείτε να εγκαταστήσετε το NBench μέσω του διαχειριστή πακέτων NuGet ή χρησιμοποιώντας την ακόλουθη εντολή στην Κονσόλα διαχείρισης πακέτων.

Εγκατάσταση-πακέτου NBench

Θα πρέπει επίσης να εγκαταστήσετε το πακέτο NBench.Runner, το οποίο χρησιμοποιείται για την εκτέλεση του δείκτη αναφοράς σας. Μπορείτε επίσης να το κάνετε μέσω NuGet ή να εκτελέσετε την ακόλουθη εντολή από την κονσόλα διαχείρισης πακέτων.

Εγκατάσταση-πακέτου NBench.Runner

Αν σας αρέσουν, θα θέλατε να εκτελέσετε τις δοκιμές απόδοσης του NBench χρησιμοποιώντας το NUnit. Μπορεί επίσης να εξετάσετε τη χρήση του Pro.NBench.xUnit. Το Pro.NBench.xUnit σάς επιτρέπει να ανακαλύπτετε, να εκτελείτε ή να κάνετε εντοπισμό σφαλμάτων δοκιμών NBench χρησιμοποιώντας το xUnit στο ReSharper.

Γράφοντας δοκιμές απόδοσης χρησιμοποιώντας το NBench

Ας διερευνήσουμε πώς μπορούμε να γράψουμε και να εκτελέσουμε δοκιμές απόδοσης χρησιμοποιώντας το NBench. Δημιουργήστε ένα νέο έργο βιβλιοθήκης τάξης και αποθηκεύστε το με ένα χρήσιμο όνομα. Στη συνέχεια, προσθέστε τα πακέτα NBench και NBench.Runner που ανέφερα παραπάνω. Εδώ είναι η αρχή της μεθόδου δοκιμών απόδοσης NBench.

[PerfBenchmark (NumberOfIterations = 1, RunMode = RunMode.Throughput,

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

δημόσιο κενό Benchmark_Performance_ElaspedTime ()

{

// Γράψτε τον κωδικό σας για συγκριτική αξιολόγηση εδώ

}

Λάβετε υπόψη ότι επειδή έχουμε απόδοση αναφοράς, πρέπει να επισημάνουμε τη μέθοδο μας χρησιμοποιώντας το PerfBenchmark Χαρακτηριστικό. Αυτό το χαρακτηριστικό λέει στον δρομέα τι να κάνει με αυτήν τη μέθοδο. Πρέπει επίσης να συμπεριλάβουμε ένα ή περισσότερα χαρακτηριστικά μέτρησης. Δεδομένου ότι δοκιμάζουμε την ταχύτητα εκτέλεσης, χρησιμοποιούμε το ElapsedTimeAssertion χαρακτηριστικό για τον καθορισμό του χρόνου εντός του οποίου πρέπει να ολοκληρωθεί η μέθοδος. Υπάρχουν πολλά άλλα χαρακτηριστικά ισχυρισμού που μπορείτε να εκμεταλλευτείτε. Οι υποστηριζόμενοι ισχυρισμοί στο NBench περιλαμβάνουν τα εξής:

  • MemoryAssertionAttribute
  • GcTotalAssertionAttribute
  • ElapsedTimeAssertionAttribute
  • CounterTotalAssertionAttribute
  • GcThroughputAssertionAttribute
  • CounterThroughputAssertionAttribute
  • PerformanceCounterTotalAssertionAttribute
  • PerformanceCounterTotalAssertionAttribute

Η ακόλουθη μέθοδος δείχνει πώς μπορούμε να συγκρίνουμε την απόδοση του συλλέκτη απορριμμάτων. ο Συγκριτική αξιολόγηση_Προβολή_GC Η μέθοδος μας δίνει τη μέγιστη, ελάχιστη, μέση και τυπική απόκλιση των συλλογών που συμβαίνουν για καθεμία από τις τρεις γενιές GC (γενιά 0, 1 και 2).

[PerfBenchmark (RunMode = RunMode.Iterations, TestMode = TestMode.Measurement)]

[GcMeasurement (GcMetric.TotalCollections, GcGeneration.AllGc)]

δημόσιο κενό Benchmark_Performance_GC ()

{

// Γράψτε τον κωδικό σας για αξιολόγηση εδώ

}

Εάν θέλετε να συγκρίνετε την απόδοση με βάση την κατανάλωση μνήμης, ακολουθεί μια μέθοδος δοκιμής που μπορείτε να χρησιμοποιήσετε.

[PerfBenchmark (Περιγραφή,

NumberOfIterations = 5, RunMode = RunMode.Throughput, RunTimeMilliseconds = 2500, TestMode = TestMode.Test)]

[MemoryAssertion (MemoryMetric.TotalBytesAllocated, MustBe.LessThanOrEqualTo, ByteConstants.SixtyFourKb)]

δημόσιο κενό Benchmark_Performance_Memory ()

{

// Γράψτε τον κωδικό σας για αξιολόγηση εδώ

}

ο Μνήμη Το χαρακτηριστικό μπορεί να χρησιμοποιηθεί για να καθορίσει ότι θέλετε να περιορίσετε την υπό δοκιμή μέθοδο για να καταναλώσετε όχι περισσότερο από την καθορισμένη ποσότητα μνήμης σε κάθε εκτέλεση του δείκτη αναφοράς. Για παράδειγμα, εάν η παραπάνω μέθοδος καταναλώνει περισσότερο από 64KB μνήμης, η δοκιμή θεωρείται ότι έχει αποτύχει.

Σημειώστε ότι σε καθένα από τα παραδείγματα κώδικα που έχω δείξει παραπάνω, παραλείψαμε τον κώδικα που πρόκειται να συγκριθεί. Η συγκριτική αξιολόγηση των μεθόδων της αίτησής σας είναι ένα απλό ζήτημα της επικόλλησης του κωδικού σας στις μεθόδους συγκριτικής αξιολόγησης όπου έχω δείξει.

Ένα ανοιχτό κώδικα, πολλαπλών πλατφορμών, αυτοματοποιημένο πλαίσιο προφίλ απόδοσης για εφαρμογές .NET, το NBench καθιστά τις δοκιμές απόδοσης και πίεσης σχεδόν εξίσου εύκολη με τη συγγραφή και την εκτέλεση δοκιμών μονάδας. Μπορείτε εύκολα να ενσωματώσετε το NBench με πλαίσια δοκιμών μονάδων όπως το NUnit. Μπορείτε ακόμη και να ενσωματώσετε το NBench με xUnit και να εκτελέσετε τις δοκιμές στο ReSharper ή στο Visual Studio Test Explorer. Μπορείτε να μάθετε περισσότερα για το NBench στο GitHub και στον ιστότοπο της Petabridge.

$config[zx-auto] not found$config[zx-overlay] not found