Ohjelmointi

Kuinka kirjoittaa suorituskykytestejä NBenchin avulla

Kun työskentelet sovellusten kanssa, haluat usein tietää muistin allokoinnin, roskakorin (GC) yleiskustannukset ja koodin läpäisykyvyn. Sovelluksesi saattaa olla hidas tai se vie paljon resursseja, ja haluat selvittää, mikä on vialla.

Vaikka toiminnalliset ongelmat ja koodiviat voidaan havaita yksikkötesteillä ja koodiarvioinnilla, saatat silti tarvita tapaa eristää suorituskykyongelmat. Tässä on NBench hyödyllinen. Tämä artikkeli esittelee keskustelun NBenchistä ja siitä, miten voimme käyttää sitä kirjoittamaan suorituskykytestejä .NET-sovelluksille.

Mikä on NBench? Miksi minun pitäisi käyttää sitä?

NBench on suosittu suorituskykytestauskehys, jota voidaan käyttää sovelluksemme menetelmien suorituskyvyn profilointiin. NBench voi mitata sovelluksesi koodin läpäisykykyä, muistin allokointia ja muistin palauttamiseen liittyviä GC: n yleiskustannuksia puhdistamalla ei-toivotut esineet.

Voit hyödyntää NBenchia "yksikkötestauksessa" sovelluksesi suorituskyvyssä samalla tavalla kuin kirjoitat yksikötestejä XUnit- tai NUnit-kehyksillä. Pidän NBenchistä parhaiten siitä, että se voidaan integroida rakennusputkesi. Vaikka NBenchillä on oma juoksija, voit silti ajaa NBenchiä NUnit- tai Resharper-ohjelmalla. Tuntuu aivan kuin suoritat yksikötestit.

NBench jaetaan NuGet-pakettina. Olettaen, että Visual Studio on jo asennettu järjestelmääsi, voit asentaa NBenchin NuGet-paketinhallinnan kautta tai käyttämällä seuraavaa komentoa paketinhallintakonsolissa.

Asenna paketti NBench

Asenna myös NBench.Runner-paketti, jota käytetään vertailuarvosi suorittamiseen. Voit tehdä sen myös NuGetin kautta tai suorittaa seuraavan komennon paketinhallintakonsolista.

Install-Package NBench.Runner

Jos olet kuin minä, sinun kannattaa suorittaa NBench-suorituskykytestisi NUnit-sovelluksella. Saatat tutkia myös Pro.NBench.xUnit-sovelluksen käyttöä. Pro.NBench.xUnit-sovelluksen avulla voit löytää, suorittaa tai virheenkorjata NBench-testejä käyttämällä ReSharperin xUnit-ohjelmaa.

Suorituskykytestien kirjoittaminen NBenchin avulla

Tutkitaan, miten voimme kirjoittaa ja suorittaa suorituskykytestejä NBenchin avulla. Luo uusi luokan kirjastoprojekti ja tallenna se hyödyllisellä nimellä. Lisää seuraavaksi edellä mainitut NBench- ja NBench.Runner-paketit. Tässä on NBench-suorituskykytestimenetelmämme alku.

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

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMillisekuntia = 5000)]

public void Benchmark_Performance_ElaspedTime ()

{

// Kirjoita vertailtava koodi tähän

}

Huomaa, että koska vertaamme suorituskykyä, meidän on merkittävä menetelmä käyttämällä PerfBenchmark määritteen. Tämä ominaisuus kertoo juoksijalle, mitä tehdä tällä menetelmällä. Meidän on myös sisällytettävä yksi tai useampi mittausattribuutti. Koska testaamme suorituksen nopeutta, käytämme ElapsedTimeAssertion attribute määrittää ajan, jonka kuluessa menetelmän pitäisi olla valmis. Voit käyttää monia muita väiteominaisuuksia. Tuetut väitteet NBenchissä sisältävät seuraavat:

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

Seuraava menetelmä kuvaa, kuinka voimme vertailla jätteiden kerääjän suorituskykyä. Vertailuarvo_suorituskyky_GC menetelmä antaa meille kullekin kolmelle GC-sukupolvelle (sukupolvi 0, 1 ja 2) tapahtuvien kokoelmien maksimi, minimi, keskiarvo ja keskihajonta.

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

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

public void Benchmark_Performance_GC ()

{

// Kirjoita vertailtava koodi tähän

}

Jos haluat vertailla suorituskykyä muistin kulutuksen perusteella, tässä on testimenetelmä, jota voit käyttää.

[PerfBenchmark (Kuvaus,

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

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

public void Benchmark_Performance_Memory ()

{

// Kirjoita vertailtava koodi tähän

}

Muisti-väite attribuuttia voidaan käyttää määrittämään, että haluat rajoittaa testattavaa menetelmää kuluttamaan enintään määritetyn määrän muistia kussakin vertailuarvon ajon aikana. Esimerkiksi, jos yllä esitetty menetelmä kuluttaa enemmän kuin 64 kt muistia, testin katsotaan epäonnistuneen.

Huomaa, että jokaisessa yllä esitetyssä koodiesimerkissä ohitin vertailtavan koodin. Sovelluksesi menetelmien vertailu on yksinkertainen kysymys koodin liittämisestä vertailumenetelmiin, joihin olen ilmoittanut.

Avoimen lähdekoodin, alustojen välinen, automaattinen suorituskyvyn profilointikehys .NET-sovelluksille NBench tekee suorituskyvyn ja stressitestauksen melkein yhtä helpoksi kuin yksikötestien kirjoittaminen ja suorittaminen. Voit integroida NBenchin helposti yksikkötestauskehyksiin, kuten NUnit. Voit jopa integroida NBenchin xUnitiin ja suorittaa testit ReSharperissa tai Visual Studio Test Explorerissa. Voit oppia lisää NBenchistä GitHubissa ja Petabridge-verkkosivustolla.

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