Programmering

Hvordan skrive ytelsestester ved hjelp av NBench

Når du arbeider med applikasjoner, vil du ofte vite minnetildeling, søppeloppsamling (GC) og overføring av koden. Søknaden din kan være treg, eller den bruker mye ressurser, og du vil finne ut hva som er galt.

Selv om du kan oppdage funksjonelle problemer og kodefeil ved hjelp av enhetstester og kodevurderinger, kan det hende du fortsatt trenger en måte å isolere ytelsesproblemer på. Her er hvor NBench kommer godt med. Denne artikkelen presenterer en diskusjon av NBench og hvordan vi kan bruke den til å skrive ytelsestester for .NET-applikasjoner.

Hva er NBench? Hvorfor skal jeg bruke den?

NBench er et populært rammeverk for ytelsestesting som kan brukes til å profilere ytelsen til metoder i applikasjonen vår. NBench kan måle gjennomstrømningen av programmets kode, minnetildeling og GC-overhead involvert i gjenvinning av minne ved å rydde opp i uønskede objekter.

Du kan utnytte NBench til å "enhetsteste" applikasjonens ytelse på samme måte som du skriver enhetstester ved hjelp av XUnit- eller NUnit-rammeverket. Det jeg liker best med NBench er at den kan integreres i din bygningsrørledning. Og selv om NBench har sin egen løper, kan du fortsatt kjøre NBench ved hjelp av NUnit eller Resharper. Det føles akkurat som å kjøre enhetstester.

NBench distribueres som en NuGet-pakke. Forutsatt at Visual Studio allerede er installert på systemet ditt, kan du installere NBench via NuGet pakkehåndtering eller ved å bruke følgende kommando i pakkehåndteringskonsollen.

Installasjonspakke NBench

Du bør også installere NBench.Runner-pakken, som brukes til å kjøre referanseindeksen din. Du kan gjøre det via NuGet også, eller utføre følgende kommando fra pakkebehandlingskonsollen.

Installasjonspakke NBench.Runner

Hvis du er som meg, vil du kjøre NBench-ytelsestester med NUnit. Du kan også se på å bruke Pro.NBench.xUnit. Pro.NBench.xUnit lar deg oppdage, kjøre eller feilsøke NBench-tester ved hjelp av xUnit i ReSharper.

Skrive ytelsestester ved hjelp av NBench

La oss utforske hvordan vi kan skrive og utføre ytelsestester ved hjelp av NBench. Lag et nytt klassebibliotekprosjekt, og lagre det med et nyttig navn. Deretter legger du til NBench- og NBench.Runner-pakkene jeg nevnte ovenfor. Her er starten på vår NBench ytelsestestmetode.

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

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

offentlig tomrom Benchmark_Performance_ElaspedTime ()

{

// Skriv koden din for å bli benchmarket her

}

Merk at fordi vi måler ytelse, må vi merke metoden vår med PerfBenchmark Egenskap. Denne attributtet forteller løperen hva de skal gjøre med denne metoden. Vi må også inkludere ett eller flere måleegenskaper. Siden vi tester for hastighet på utførelse, bruker vi ElapsedTimeAssertion attributt for å spesifisere tiden metoden skal fullføres. Det er mange andre påstandsattributter du kan dra nytte av. De støttede påstandene i NBench inkluderer følgende:

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

Følgende metode illustrerer hvordan vi kan måle ytelsen til søppeloppsamleren. De Benchmark_Performance_GC metoden gir oss maks, min, gjennomsnitt og standardavvik for samlinger som forekommer for hver av de tre GC-generasjonene (generasjon 0, 1 og 2).

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

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

offentlig ugyldighet Benchmark_Performance_GC ()

{

// Skriv koden din for å bli benchmarket her

}

Hvis du vil måle ytelse basert på minneforbruk, er her en testmetode du kan bruke.

[PerfBenchmark (beskrivelse,

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

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

offentlig ugyldighet Benchmark_Performance_Memory ()

{

// Skriv koden din for å bli benchmarket her

}

De MemoryAssertion attributt kan brukes til å spesifisere at du vil begrense metoden som testes, til å ikke forbruke mer enn den angitte mengden minne i hver kjøring av referanseverdien. For eksempel, hvis metoden vist ovenfor bruker mer enn 64 kB minne, anses testen å ha mislyktes.

Merk at i hvert av kodeeksemplene jeg har vist ovenfor, hoppet jeg over koden som skal benchmarkes. Å måle metodene for søknaden din er et enkelt spørsmål om å lime inn koden din i referansemetodene der jeg har angitt.

NBench er en åpen kildekode, plattform, automatisert ytelsesprofilering for .NET applikasjoner, og gjør ytelse og stresstesting nesten like enkelt som å skrive og utføre enhetstester. Du kan enkelt integrere NBench med enhetstestingsrammer som NUnit. Du kan til og med integrere NBench med xUnit og kjøre testene i ReSharper eller Visual Studio Test Explorer. Du kan lære mer om NBench på GitHub og på Petabridge-nettstedet.

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