Programavimas

Kaip palyginti C # kodą naudojant „BenchmarkDotNet“

„BenchmarkDotNet“ yra lengva, atviro kodo, galinga .NET biblioteka, kuri gali transformuoti jūsų metodus į etalonus, sekti tuos metodus ir pateikti įžvalgų apie užfiksuotus našumo duomenis. „BenchmarkDotNet“ etalonus lengva parašyti, o lyginamosios analizės proceso rezultatai taip pat yra patogūs vartotojui.

Galite pasinaudoti „BenchmarkDotNet“ pranašumais, kad galėtumėte palyginti tiek .NET Framework, tiek .NET Core programas. Šiame straipsnyje mes ištirsime, kaip mes galime dirbti su „BenchmarkDotNet“ .NET Core. „BenchmarkDotNet“ galite rasti „GitHub“.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

„Visual Studio“ sukurkite konsolės programos projektą

Pirmiausia sukurkime .NET Core konsolės programos projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują .NET Core konsolės programos projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „Console App (.NET Core)“.
  4. Spustelėkite Pirmyn.
  5. Tada rodomame lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.

Tai sukurs naują „.NET Core“ konsolės programos projektą „Visual Studio 2019“.

Atminkite, kad kai kuriate konsolės programos projektą, gauta Programos klasė (automatiškai sugeneruota faile Program.cs) atrodys taip:

klasės programa

{

static void Main (string [] args)

  {

Console.WriteLine („Labas pasaulis!“);

  }

}

Šį projektą ir Programos klasę naudosime dirbdami su „BenchmarkDotNet“ tolesniuose šio straipsnio skyriuose.

Įdiekite „BenchmarkDotNet NuGet“ paketą

Norėdami dirbti su „BenchmarkDotNet“, turite įdiegti „BenchmarkDotNet“ paketą. Tai galite padaryti naudodami „NuGet“ paketų tvarkytuvę „Visual Studio 2019“ IDE arba vykdydami šią komandą „NuGet“ paketų tvarkyklės konsolėje:

„Install-Package BenchmarkDotNet“

Kodėl verta rinktis kodą?

Etalonas yra matavimas arba matavimų rinkinys, susijęs su kodo veikimu programoje. Palyginimo kodas yra būtinas norint suprasti jūsų programos metodų našumo metriką. Optimizuojant kodą visada gera turėti metriką. Mums labai svarbu žinoti, ar kodo pakeitimai pagerino ar pablogino našumą. Palyginimas taip pat padeda susiaurinti programos kodus, kurias reikia atnaujinti.

Veiksmai, kaip atlikti palyginimo kodą naudojant „BenchmarkDotNet“

Norėdami paleisti „BenchmarkDotNet“ savo .NET Framework arba .NET Core programoje, turite atlikti šiuos veiksmus:

  1. Pridėkite reikiamą „NuGet“ paketą
  2. Pridėkite „Benchmark“ atributus prie savo metodų
  3. Sukurkite „BenchmarkRunner“ egzempliorių
  4. Paleiskite programą išleidimo režimu

Sukurkite .NET Core etalonų klasę

Atidarykite „Program.cs“ failą ir ten įrašykite šį kodą.

  [„MemoryDiagnoser“]

viešosios klasės „MemoryBenchmarkerDemo“

    {

int NumberOfItems = 100000;

[Etalonas]

viešoji eilutė „ConcatStringsUsingStringBuilder“ ()

        {

var sb = naujas StringBuilder ();

už (int i = 0; i <NumberOfItems; i ++)

            {

sb.Append („Labas pasaulis!“ + i);

            }

grįžti sb.ToString ();

        }

[Etalonas]

viešoji eilutė „ConcatStringsUsingGenericList“ ()

        {

var list = naujas sąrašas (NumberOfItems);

už (int i = 0; i <NumberOfItems; i ++)

            {

sąrašas.Pridėti („Sveikas pasauli!“ + i);

            }

grąžinimo sąrašas.ToString ();

        }

    }

Pirmiau pateikta programa parodo, kaip galite rašyti palyginimo metodus. Pažymėkite „Benchmark“ atributo naudojimą ant kiekvieno iš metodų, kurie turi būti lyginami.

Failo „Program.cs“ pagrindiniame metode turite nurodyti pradinį pradinį tašką - „BenchmarkRunner“ klasę. Tai būdas informuoti „BenchmarkDotNet“, kad jis atliktų etalonus nurodytoje klasėje. Taigi pakeiskite numatytąjį pagrindinio metodo kodą faile Program.cs naudodami šį kodo fragmentą.

static void Main (string [] args)

{

var santrauka = ​​BenchmarkRunner.Run ();

}

Vykdykite etaloną savo .NET Core programoje

Jei paleisite programą derinimo režimu, pamatysite šį klaidos pranešimą:

Kai atliksite lyginamąją analizę, visada turėtumėte užtikrinti, kad projektą vykdote išleidimo režimu. Priežastis ta, kad kompiliavimo metu kodas derinamas skirtingai tiek derinimo, tiek išleidimo režimams. C # kompiliatorius atlieka keletą optimizavimo išleidimo režimu, kurių negalima derinimo režimu.

Taigi turėtumėte vykdyti savo projektą tik leidimo režimu. Norėdami paleisti palyginimą, „Visual Studio“ komandų eilutėje nurodykite šią komandą.

dotnet run -p „BenchmarkDotNetDemo.csproj -c“ leidimas

Norėdami pasiekti geriausių rezultatų, prieš vykdydami etalonus, įsitikinkite, kad visos programos yra uždarytos ir sustabdyti visi nereikalingi procesai.

Atminkite, kad jei nenurodote konfigūracijos parametro, vykdymo laikas bandys atlikti palyginimą pagal neoptimizuotą derinimo režimo kodą. Jums bus pateikta ta pati klaida, kaip parodyta 1 paveiksle.

Išanalizuokite palyginimo rezultatus

Baigus lyginamosios analizės procesą, rezultatų suvestinė bus rodoma konsolės lange. Santraukos skyriuje pateikiama informacija, susijusi su aplinka, kurioje buvo atlikti etalonai, pvz., „BenchmarkDotNet“ versija, operacinė sistema, kompiuterio techninė įranga, .NET versija, kompiliatoriaus informacija ir informacija, susijusi su programos našumu.

Keli failai taip pat bus sukurti aplanke „BenchmarkDotNet.Artifacts“, esančiame programos šakniniame aplanke. Čia pateikiama rezultatų santrauka.

Kaip matyti iš 2 paveiksle parodytos suvestinės, kiekvienam palyginamam metodui matysite duomenų eilutę, nurodančią našumo metriką, pvz., Vidutinį vykdymo laiką, Gen 1, Gen 1, Gen 2 rinkinius ir kt.

Nagrinėdami 3 paveiksle parodytus rezultatus, galite pamatyti, kad „ConcatStringUsingGenericList“ yra daug greitesnis nei „ConcatStringUsingStringBuilder“ metodas. Taip pat galite pamatyti, kad paleidus „ConcatStringUsingStringBuilder“ metodą yra daug daugiau paskirstymų.

Dabar pridėkite „RankColumn“ atributą ant „MemoryBenchmarkerDemo“ klasės. Tai prie išvesties pridės papildomą stulpelį, nurodantį, kuris metodas buvo greitesnis. Dar kartą vykdykite palyginimo procesą naudodami šią komandą.

dotnet run -p „BenchmarkDotNetDemo.csproj -c“ leidimas

Kai paleidžiate šią komandą, lyginamosios analizės procesas prasideda ir rodo išvestį po to, kai palyginimo procesas bus sėkmingai įvykdytas. Žemiau pateiktame 4 paveiksle parodytas rezultatas su pridėtu „RankColumn“.

„BenchmarkDotNet“ yra puikus įrankis, suteikiantis paprastą būdą priimti pagrįstą sprendimą dėl jūsų programos našumo metrikos. Programoje „BenchmarkDotNet“ metodo iškvietimas, kurio atributų rinkinys yra „Benchmark“, yra žinomas kaip operacija. Pakartojimas yra kelių operacijų rinkinio pavadinimas.

Galite ištirti demonstracinę ASP.NET Core programą, kurioje pavaizduoti keli kodo palyginimo būdai. Programą galite gauti iš „ASP.NET“ atsarginės kopijos „GitHub“.

Kaip padaryti daugiau C #:

  • Kaip susieti statinius metodus C #
  • Kaip performuoti Dievo objektus C #
  • Kaip naudoti „ValueTask“ C #
  • Kaip naudoti nekintamumą C
  • Kaip naudoti const, readonly ir static C #
  • Kaip naudoti duomenų komentarus C #
  • Kaip dirbti su GU # C # 8
  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #
  • Kaip naudoti Dapper ORM C #
  • Kaip naudoti „flyweight“ dizaino modelį C #
$config[zx-auto] not found$config[zx-overlay] not found