Ohjelmointi

Kuinka vertailla C # -koodia BenchmarkDotNetin avulla

BenchmarkDotNet on kevyt, avoimen lähdekoodin tehokas .NET-kirjasto, joka voi muuntaa menetelmät vertailuarvoiksi, seurata näitä menetelmiä ja antaa sitten oivalluksia siepattuihin suoritustietoihin. BenchmarkDotNet-vertailuarvojen kirjoittaminen on helppoa ja vertailuprosessin tulokset ovat myös käyttäjäystävällisiä.

BenchmarkDotNetin avulla voit vertailla sekä .NET Framework- että .NET Core -sovelluksia. Tässä artikkelissa tutkitaan, miten voimme työskennellä BenchmarkDotNetin kanssa .NET Core -sovelluksessa. Löydät BenchmarkDotNetin GitHubista.

Jotta voit työskennellä tässä artikkelissa annettujen koodiesimerkkien kanssa, järjestelmässäsi on oltava asennettuna Visual Studio 2019. Jos sinulla ei vielä ole kopiota, voit ladata Visual Studio 2019 täältä.

Luo konsolisovellusprojekti Visual Studiossa

Ensinnäkin, luodaan .NET Core -konsolisovellusprojekti Visual Studiossa. Olettaen, että Visual Studio 2019 on asennettu järjestelmään, luo uusi .NET Core -konsolisovellusprojekti Visual Studiossa noudattamalla seuraavia ohjeita.

  1. Käynnistä Visual Studio IDE.
  2. Napsauta Luo uusi projekti.
  3. Valitse Luo uusi projekti -ikkunassa ”Console App (.NET Core)” näytetystä malliluettelosta.
  4. Napsauta Seuraava.
  5. Määritä seuraavan projektin nimi ja sijainti uuden Konfiguroi uusi projekti -ikkunassa.
  6. Napsauta Luo.

Tämä luo uuden .NET Core -konsolisovellusprojektin Visual Studio 2019: ssä.

Huomaa, että kun luot konsolisovellusprojektin, tuloksena oleva Program-luokka (joka luodaan automaattisesti Program.cs-tiedostossa) näyttää tältä:

luokan ohjelma

{

staattinen void Main (merkkijono [] args)

  {

Console.WriteLine ("Hei maailma!");

  }

}

Käytämme tätä projektia ja ohjelmaluokkaa työskennellessäsi BenchmarkDotNetin kanssa tämän artikkelin seuraavissa osissa.

Asenna BenchmarkDotNet NuGet -paketti

Jos haluat työskennellä BenchmarkDotNetin kanssa, sinun on asennettava BenchmarkDotNet-paketti. Voit tehdä tämän joko Visual Studio 2019 IDE: n sisällä olevan NuGet Package Managerin kautta tai suorittamalla seuraavan komennon NuGet Package Manager -konsolissa:

Install-Package BenchmarkDotNet

Miksi vertailukoodi?

Vertailuarvo on mittaus tai joukko mittauksia, jotka liittyvät koodikappaleen suorituskykyyn sovelluksessa. Vertailukoodi on välttämätön sovelluksen menetelmien suorituskykymittareiden ymmärtämiseksi. Aina on hyvä tapa pitää mittarit käsillä, kun optimoit koodia. Meille on erittäin tärkeää tietää, ovatko koodiin tehdyt muutokset parantaneet vai heikentäneet suorituskykyä. Benchmarking auttaa myös kaventamaan sovelluksen koodin osia, jotka tarvitsevat korjaamista.

BenchmarkDotNet-sovelluksen vertailukoodin vaiheet

Suorita BenchmarkDotNet .NET Framework- tai .NET Core -sovelluksessa seuraavasti:

  1. Lisää tarvittava NuGet-paketti
  2. Lisää Benchmark-määritteet menetelmiin
  3. Luo BenchmarkRunner-ilmentymä
  4. Suorita sovellus vapautustilassa

Luo vertailuluokka .NET Core -sovellukseen

Avaa Program.cs-tiedosto ja kirjoita seuraava koodi sinne.

  [Muistidiagnostiikka]

julkisen luokan MemoryBenchmarkerDemo

    {

int NumberOfItems = 100000;

[Vertailuarvo]

julkinen merkkijono ConcatStringsUsingStringBuilder ()

        {

var sb = uusi StringBuilder ();

for (int i = 0; i <NumberOfItems; i ++)

            {

sb.Append ("Hei maailma!" + i);

            }

return sb.ToString ();

        }

[Vertailuarvo]

julkinen merkkijono ConcatStringsUsingGenericList ()

        {

var list = uusi luettelo (NumberOfItems);

for (int i = 0; i <NumberOfItems; i ++)

            {

list.Add ("Hei maailma!" + i);

            }

palautuslista.ToString ();

        }

    }

Yllä oleva ohjelma kuvaa, kuinka voit kirjoittaa menetelmiä vertailua varten. Huomaa Benchmark-määritteen käyttö kunkin vertailtavan menetelmän päällä.

Program.cs-tiedoston Main-menetelmässä sinun on määritettävä aloituspiste - BenchmarkRunner-luokka. Tämä on tapa ilmoittaa BenchmarkDotNetille suorittamaan vertailuarvoja määritetylle luokalle. Joten korvaa Main-menetelmän oletuskoodi Program.cs-tiedostossa seuraavalla koodinpätkällä.

staattinen void Main (merkkijono [] args)

{

var yhteenveto = BenchmarkRunner.Run ();

}

Suorita vertailuarvo .NET Core -sovelluksessa

Jos suoritat sovelluksen virheenkorjaustilassa, näet seuraavan virheilmoituksen:

Vertailuanalyysin aikana on aina varmistettava, että suoritat projektisi julkaisutilassa. Syynä on se, että kääntämisen aikana koodi optimoidaan eri tavalla sekä virheenkorjaus- että julkaisutiloille. C #-kääntäjä tekee muutaman optimoinnin julkaisutilassa, jotka eivät ole käytettävissä virheenkorjaustilassa.

Siksi sinun tulisi suorittaa projekti vain julkaisutilassa. Suorita vertailu määrittelemällä seuraava komento Visual Studion komentokehotteeseen.

dotnet run -p BenchmarkDotNetDemo.csproj -c -julkaisu

Parhaan tuloksen saavuttamiseksi sinun on varmistettava, että kaikki sovellukset on suljettu ja kaikki tarpeettomat prosessit pysäytetty ennen vertailuarvojen suorittamista.

Huomaa, että jos et määritä kokoonpanoparametriä, ajonaika yrittää suorittaa vertailun optimoimattomalla virheenkorjaustilakoodilla. Ja sinulle näytetään sama virhe kuin kuvassa 1.

Analysoi vertailutulokset

Kun vertailuprosessin suorittaminen on valmis, yhteenveto tuloksista näkyy konsoli-ikkunassa. Yhteenveto-osio sisältää tietoja ympäristöstä, jossa vertailuarvot suoritettiin, kuten BenchmarkDotNet-versio, käyttöjärjestelmä, tietokonelaitteisto, .NET-versio, kääntäjän tiedot ja sovelluksen suorituskykyyn liittyvät tiedot.

Muutama tiedosto luodaan myös sovelluksen juurikansiossa olevaan BenchmarkDotNet.Artifacts-kansioon. Tässä on yhteenveto tuloksista.

Kuten kuvassa 2 esitetystä yhteenvedosta käy ilmi, kullekin vertailumenetelmälle näet rivin tiedot, jotka määrittelevät suorituskykymittarit, kuten keskimääräinen suoritusaika, Gen 0, Gen 1, Gen 2 -kokoelmat jne.

Tutkimalla kuvassa 3 esitettyjä tuloksia näet, että ConcatStringUsingGenericList on paljon nopeampi kuin ConcatStringUsingStringBuilder-menetelmä. ConcatStringUsingStringBuilder -menetelmän suorittamisen jälkeen voit myös nähdä, että varauksia on paljon enemmän.

Lisää nyt RankColumn-attribuutti MemoryBenchmarkerDemo-luokan päälle. Tämä lisää ylimääräisen sarakkeen lähtöön, mikä osoittaa, mikä menetelmä oli nopeampi. Suorita vertailuprosessi uudelleen seuraavan komennon avulla.

dotnet run -p BenchmarkDotNetDemo.csproj -c -julkaisu

Kun suoritat tämän komennon, vertailuprosessi käynnistyy ja näyttää tuloksen, kun vertailuprosessi on suoritettu onnistuneesti. Alla olevassa kuvassa 4 on esitetty tulos, johon on lisätty RankColumn.

BenchmarkDotNet on mukava työkalu, joka tarjoaa yksinkertaisen tavan tehdä tietoinen päätös sovelluksesi suorituskykymittareista. BenchmarkDotNetissä menetelmän kutsuminen, jolla on Benchmark-määritemääritelmä, tunnetaan operaationa. Iteraatio on nimi, joka annetaan useiden toimintojen kokoelmalle.

Voit tutustua esittely ASP.NET Core -sovellukseen, joka kuvaa useita tapoja vertailla koodia. Voit hakea sovelluksen GitHubin ASP.NET-reposta.

Kuinka tehdä enemmän C #: ssä:

  • Staattisten menetelmien testaaminen yksikössä C #
  • Kuinka refactor Jumalan esineitä C #
  • Kuinka käyttää ValueTaskia C #: ssä
  • Kuinka käyttää muuttumattomuutta C: ssä
  • Kuinka käyttää const, readonly ja staattinen C #: ssä
  • Tietomerkintöjen käyttäminen C #: ssä
  • Kuinka käyttää GUID-tunnuksia C # 8: ssa
  • Milloin abstraktia luokkaa vs. käyttöliittymää käytetään C #: ssä
  • Kuinka työskennellä AutoMapperin kanssa C #: ssä
  • Kuinka käyttää lambda-lausekkeita C #: ssä
  • Kuinka toimia Action-, Func- ja Predicate-edustajien kanssa C #: ssä
  • Kuinka työskennellä C #: n edustajien kanssa
  • Kuinka toteuttaa yksinkertainen kirjaaja C #: ssä
  • Kuinka työskennellä attribuuttien kanssa C #: ssä
  • Kuinka työskennellä log4netin kanssa C #: ssä
  • Kuinka toteuttaa arkiston suunnittelumalli C #: ssä
  • Kuinka työskennellä heijastuksen kanssa C #: ssä
  • Kuinka työskennellä tiedostojärjestelmän katselijan kanssa C #: ssä
  • Kuinka tehdä laiska alustus C #: ssä
  • Kuinka työskennellä MSMQ: n kanssa C #: ssä
  • Kuinka työskennellä laajennusmenetelmien kanssa C #: ssä
  • Kuinka meille lambda-lausekkeet C #: ssä
  • Milloin haihtuvaa avainsanaa käytetään C #: ssä
  • Tuottoavainsanan käyttäminen C #: ssä
  • Kuinka toteuttaa polymorfismi C #: ssa
  • Kuinka rakentaa oma tehtävän ajastin C #
  • Kuinka työskennellä RabbitMQ: n kanssa C #: ssä
  • Kuinka työskennellä C #: n kanssa
  • Virtuaalisten ja abstraktien menetelmien tutkiminen C #: ssä
  • Kuinka käyttää Dapper ORMia C #: ssä
  • Lentopainokuvion käyttäminen C #: ssä
$config[zx-auto] not found$config[zx-overlay] not found