Programmēšana

Kā salīdzināt C # kodu, izmantojot BenchmarkDotNet

BenchmarkDotNet ir viegla, atvērta pirmkoda, jaudīga .NET bibliotēka, kas var pārveidot jūsu metodes par etalonu, izsekot šīm metodēm un pēc tam sniegt ieskatu par uzņemtajiem veiktspējas datiem. BenchmarkDotNet etalonu sastādīšana ir vienkārša, un salīdzinošās novērtēšanas procesa rezultāti ir arī lietotājam draudzīgi.

Varat izmantot BenchmarkDotNet priekšrocības, lai salīdzinātu gan .NET Framework, gan .NET Core lietojumprogrammas. Šajā rakstā mēs izpētīsim, kā mēs varam strādāt ar BenchmarkDotNet .NET Core. BenchmarkDotNet varat atrast vietnē GitHub.

Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Visual Studio izveidojiet konsoles lietojumprogrammas projektu

Vispirms izveidosim .NET Core konsoles lietojumprogrammas projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai Visual Studio izveidotu jaunu .NET Core konsoles lietojumprogrammas projektu.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “Console App (.NET Core)”.
  4. Noklikšķiniet uz Tālāk.
  5. Nākamajā logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.

Tādējādi Visual Studio 2019 tiks izveidots jauns .NET Core konsoles lietojumprogrammas projekts.

Ņemiet vērā, ka, izveidojot konsoles lietojumprogrammas projektu, iegūtā Program klases (kas automātiski tiek ģenerēta failā Program.cs) izskatīsies šādi:

klases programma

{

static void Main (virkne [] args)

  {

Console.WriteLine ("Sveika pasaule!");

  }

}

Mēs izmantosim šo projektu un Programmas klasi darbam ar BenchmarkDotNet šī raksta nākamajās sadaļās.

Instalējiet BenchmarkDotNet NuGet pakotni

Lai strādātu ar BenchmarkDotNet, jums jāinstalē BenchmarkDotNet pakotne. To var izdarīt, izmantojot NuGet pakešu pārvaldnieku Visual Studio 2019 IDE, vai arī izpildot šo komandu NuGet pakešu pārvaldnieka konsolē:

Install-Package BenchmarkDotNet

Kāpēc nepieciešams etalona kods?

Etalons ir mērījums vai mērījumu kopums, kas saistīts ar koda fragmenta darbību lietojumprogrammā. Salīdzinošais kods ir būtisks, lai izprastu metožu veiktspējas metriku jūsu lietojumprogrammā. Vienmēr ir laba pieeja, ja metrika ir pieejama, kad optimizējat kodu. Mums ir ļoti svarīgi zināt, vai kodā veiktās izmaiņas ir uzlabojušas vai pasliktinājušas veiktspēju. Salīdzinošā salīdzināšana arī palīdz sašaurināt lietojumprogrammas koda daļas, kurām nepieciešama atjaunošana.

Soļi etalona kodam, izmantojot BenchmarkDotNet

Lai palaistu BenchmarkDotNet savā .NET Framework vai .NET Core lietojumprogrammā, jums jāveic šādas darbības:

  1. Pievienojiet nepieciešamo NuGet paketi
  2. Pievienojiet savām metodēm etalona atribūtus
  3. Izveidojiet BenchmarkRunner instanci
  4. Palaidiet lietojumprogrammu atbrīvošanas režīmā

Izveidojiet .NET Core etalonu klasi

Atveriet failu Program.cs un ierakstiet tur šo kodu.

  [MemoryDiagnoser]

publiskā klase MemoryBenchmarkerDemo

    {

int NumberOfItems = 100000;

[Etalons]

publiskā virkne ConcatStringsUsingStringBuilder ()

        {

var sb = jauns StringBuilder ();

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

            {

sb.Append ("Sveika pasaule!" + i);

            }

atgriezties sb.ToString ();

        }

[Etalons]

publiskā virkne ConcatStringsUsingGenericList ()

        {

var list = jauns saraksts (NumberOfItems);

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

            {

saraksts.Pievienot ("Sveika pasaule!" + i);

            }

atgriešanās saraksts.ToString ();

        }

    }

Iepriekš minētā programma parāda, kā jūs varat rakstīt etalonu veidošanas metodes. Ievērojiet Benchmark atribūta lietošanu virs katras metodes, kas tiks salīdzināta.

Faila Program.cs Main metodē jums jānorāda sākotnējais sākuma punkts - BenchmarkRunner klase. Tas ir veids, kā informēt BenchmarkDotNet, lai palaistu etalonus norādītajā klasē. Tātad, nomainiet faila Program.cs noklusējuma galveno metodi, izmantojot šādu koda fragmentu.

static void Main (virkne [] args)

{

var apkopojums = BenchmarkRunner.Run ();

}

Palaidiet etalonu savā .NET Core lietojumprogrammā

Ja lietojumprogrammu palaidat atkļūdošanas režīmā, tiks parādīts šāds kļūdas ziņojums:

Veicot salīdzinošo novērtēšanu, jums vienmēr jāpārliecinās, ka jūsu projekts tiek palaists izlaišanas režīmā. Iemesls ir tāds, ka kompilēšanas laikā kods tiek atšķirīgi optimizēts gan atkļūdošanas, gan izlaišanas režīmiem. C # kompilators atbrīvošanas režīmā veic dažas optimizācijas, kas nav pieejamas atkļūdošanas režīmā.

Tāpēc jums vajadzētu palaist savu projektu tikai izlaišanas režīmā. Lai palaistu etalonu, Visual Studio komandu uzvednē norādiet šo komandu.

dotnet palaist -p BenchmarkDotNetDemo.csproj -c laidiens

Lai iegūtu labākos rezultātus, pirms etalonu palaišanas pārliecinieties, vai visas lietojumprogrammas ir aizvērtas un visi nevajadzīgie procesi ir apturēti.

Ņemiet vērā, ka, ja jūs nenorādīsit konfigurācijas parametru, izpildlaiks mēģinās veikt salīdzinošo novērtēšanu ar neoptimizētu atkļūdošanas režīma kodu. Jums tiks parādīta tā pati kļūda, kas parādīta 1. attēlā.

Analizējiet etalonu rezultātus

Kad etalonsalīdzināšanas process ir pabeigts, konsoles logā tiks parādīts rezultātu kopsavilkums. Kopsavilkuma sadaļā ir informācija, kas saistīta ar vidi, kurā etaloni tika izpildīti, piemēram, BenchmarkDotNet versija, operētājsistēma, datora aparatūra,.

Daži faili tiks izveidoti arī mapē BenchmarkDotNet.Artifacts, kas atrodas lietojumprogrammas saknes mapē. Šeit ir rezultātu kopsavilkums.

Kā redzams no 2. attēlā redzamā kopsavilkuma, katrai etalona metodei tiks parādīta datu rinda, kurā norādīti veiktspējas rādītāji, piemēram, vidējais izpildes laiks, Gen 0, Gen 1, Gen 2 kolekcijas utt.

Pārbaudot 3. attēlā parādītos rezultātus, jūs varat redzēt, ka ConcatStringUsingGenericList ir daudz ātrāks nekā ConcatStringUsingStringBuilder metode. Varat arī redzēt, ka pēc ConcatStringUsingStringBuilder metodes palaišanas ir daudz vairāk piešķīrumu.

Tagad pievienojiet RankColumn atribūtu klases MemoryBenchmarkerDemo augšpusē. Tas izveidei pievienos papildu kolonnu, norādot, kura metode bija ātrāka. Vēlreiz palaidiet etalonu procesu, izmantojot šādu komandu.

dotnet palaist -p BenchmarkDotNetDemo.csproj -c laidiens

Palaidot šo komandu, etalonsalīdzināšanas process sākas un parāda izvadi pēc tam, kad etalonsalīdzināšanas process ir veiksmīgi izpildīts. Zemāk 4. attēlā parādīta izeja ar pievienotu RankColumn.

BenchmarkDotNet ir jauks rīks, kas nodrošina vienkāršu veidu, kā pieņemt apzinātu lēmumu par lietojumprogrammas veiktspējas rādītājiem. Programmā BenchmarkDotNet metodes, kuras atribūtu kopa ir Benchmark, izsaukšana ir pazīstama kā operācija. Iterācija ir nosaukums, kas piešķirts vairāku darbību kolekcijai.

Varat izpētīt demonstrācijas lietojumprogrammu ASP.NET Core, kas ilustrē vairākus koda etalona veidus. Lietojumprogrammu var iegūt no ASP.NET repo vietnē GitHub.

Kā izdarīt vairāk C #:

  • Kā testēt statiskās metodes C #
  • Kā pārveidot Dieva objektus C #
  • Kā izmantot ValueTask C #
  • Kā izmantot nemainīgumu C
  • Kā lietot const, tikai lasāmu un statisku C #
  • Kā izmantot datu anotācijas C #
  • Kā strādāt ar GUID C # 8
  • Kad izmantot abstraktu klasi un saskarni C #
  • Kā strādāt ar AutoMapper C #
  • Kā lietot lambda izteicienus C #
  • Kā strādāt ar Action, Func un Predicate delegātiem C #
  • Kā strādāt ar delegātiem C #
  • Kā ieviest vienkāršu reģistrētāju C #
  • Kā strādāt ar atribūtiem C #
  • Kā strādāt ar log4net C #
  • Kā ieviest krātuves dizaina modeli C #
  • Kā strādāt ar refleksiju C #
  • Kā strādāt ar filesystemwatcher C #
  • Kā veikt slinku inicializāciju C #
  • Kā strādāt ar MSMQ C #
  • Kā strādāt ar paplašināšanas metodēm C #
  • Kā mums izteikt lambda izteicienus C #
  • Kad lietot svārstīgo atslēgvārdu C #
  • Kā izmantot ienesīguma atslēgvārdu C #
  • Kā ieviest polimorfismu C #
  • Kā izveidot savu uzdevumu plānotāju C #
  • Kā strādāt ar RabbitMQ C #
  • Kā strādāt ar dubultošanos C #
  • Virtuālu un abstraktu metožu izpēte C #
  • Kā lietot Dapper ORM C #
  • Kā izmantot lidojošā dizaina rakstu C #
$config[zx-auto] not found$config[zx-overlay] not found