Programavimas

Kaip rašyti našumo testus naudojant NBench

Dirbdami su programomis dažnai norėsite sužinoti atminties paskirstymą, šiukšlių surinkimo (GC) pridėtines išlaidas ir kodo pralaidumą. Jūsų programa gali būti lėta arba sunaudojanti daug išteklių, ir jūs norite sužinoti, kas negerai.

Nors funkcines problemas ir kodo defektus galite nustatyti naudodami vieneto testus ir kodų peržiūras, vis tiek gali prireikti būdo išskirti našumo problemas. Čia praverčia „NBench“. Šiame straipsnyje pateikiama „NBench“ diskusija ir kaip mes galime ją naudoti rašydami .NET programų našumo testus.

Kas yra NBench? Kodėl turėčiau jį naudoti?

„NBench“ yra populiari našumo testavimo sistema, kuri gali būti naudojama mūsų programos metodų našumui apibūdinti. „NBench“ gali išmatuoti jūsų programos kodo pralaidumą, atminties paskirstymą ir GC pridėtines išlaidas, susijusias su atminties atkūrimu, išvalant nepageidaujamus objektus.

Galite naudoti „NBench“, kad „patikrintumėte vienetą“ savo programos našumą taip pat, kaip rašote vieneto testus naudodami „XUnit“ arba „NUnit“ sistemas. Man labiausiai patinka „NBench“ yra tai, kad jis gali būti integruotas į jūsų tiesimo vamzdyną. Nors „NBench“ turi savo bėgiką, vis tiek galite paleisti „NBench“ naudodami „NUnit“ arba „Resharper“. Jaučiasi lygiai taip pat, kaip vykdyti savo vieneto testus.

„NBench“ platinamas kaip „NuGet“ paketas. Darant prielaidą, kad „Visual Studio“ jau įdiegta jūsų sistemoje, „NBench“ galite įdiegti naudodami „NuGet“ paketų tvarkyklę arba naudodami šią komandą paketų tvarkyklės konsolėje.

„Install-Package NBench“

Taip pat turėtumėte įdiegti „NBench.Runner“ paketą, kuris naudojamas jūsų etalonui paleisti. Tai galite padaryti per „NuGet“ arba paketų tvarkyklės konsolėje įvykdyti šią komandą.

„Install-Package NBench.Runner“

Jei esate panašus į mane, norėsite atlikti „NBench“ našumo testus naudodami „NUnit“. Taip pat galite pasidomėti, kaip naudoti „Pro.NBench.xUnit“. „Pro.NBench.xUnit“ leidžia jums rasti, paleisti ar derinti „NBench“ testus naudojant „ReSharper“ esančią „xUnit“.

Veiklos testų rašymas naudojant NBench

Panagrinėkime, kaip galime rašyti ir atlikti našumo testus naudodami „NBench“. Sukurkite naują klasės bibliotekos projektą ir išsaugokite jį naudingu pavadinimu. Tada pridėkite „NBench“ ir „NBench.Runner“ paketus, kuriuos minėjau aukščiau. Čia yra mūsų „NBench“ našumo bandymo metodo pradžia.

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

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

public void „Benchmark_Performance_ElaspedTime“ ()

{

// Čia parašykite savo kodą, kad būtų galima palyginti

}

Atkreipkite dėmesį, kad kadangi mes lyginame našumą, turime pažymėti savo metodą naudodami „PerfBenchmark“ atributas. Šis atributas nurodo bėgikui, ką daryti su šiuo metodu. Taip pat turime įtraukti vieną ar daugiau matavimo atributų. Kadangi tikriname vykdymo greitį, naudojame ElapsedTimeAssertion atributas, nurodantis laiką, per kurį metodas turėtų būti baigtas. Yra daugybė kitų teiginių, kuriais galite pasinaudoti. Palaikomi „NBench“ teiginiai yra šie:

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

Šis metodas iliustruoja, kaip mes galime palyginti šiukšlių surinkėjo našumą. Etalonas_Vykdymas_GC metodas pateikia maksimalų, mažiausią, vidutinį ir standartinį rinkinių nuokrypį, atsirandantį kiekvienoje iš trijų GC kartų (0, 1 ir 2 kartos).

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

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

public void „Benchmark_Performance_GC“ ()

{

// Čia parašykite savo kodą, kad būtų galima palyginti

}

Jei norite palyginti našumą pagal atminties suvartojimą, pateikite bandymo metodą, kurį galite naudoti.

[„PerfBenchmark“ (aprašas,

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

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

public void „Benchmark_Performance_Memory“ ()

{

// Čia parašykite savo kodą, kad būtų galima palyginti

}

Atminties tvirtinimas atributas gali būti naudojamas nurodyti, kad norite apriboti bandomą metodą, kad kiekviename etalono vykdyme būtų sunaudojama daugiau nei nurodyta atminties. Pavyzdžiui, jei aukščiau pateiktas metodas sunaudoja daugiau nei 64 KB atminties, laikoma, kad bandymas nepavyko.

Atkreipkite dėmesį, kad kiekviename iš aukščiau pateiktų kodų pavyzdžių praleidau kodą, kurį reikia palyginti. Programos metodų palyginimas yra paprastas dalykas, kai įklijuojate kodą į palyginimo metodus, kur aš nurodžiau.

Atvirojo kodo, daugiaplatformė, automatinė .NET programų našumo profiliavimo sistema „NBench“ leidžia atlikti našumą ir įtampos testus beveik taip pat lengva, kaip rašyti ir vykdyti vieneto testus. Galite lengvai integruoti „NBench“ su vieneto testavimo sistemomis, tokiomis kaip „NUnit“. Jūs netgi galite integruoti „NBench“ su „xUnit“ ir paleisti bandymus „ReSharper“ arba „Visual Studio Test Explorer“. Daugiau apie „NBench“ galite sužinoti „GitHub“ ir „Petabridge“ svetainėje.