C# ja miljardin rivin haaste, osa 3

Published on Sunday, March 17, 2024

C# ja miljardin rivin haaste, osa 3

Edellisessä blogikirjoituksessa käsittelin ensimmäistä optimoitua versiota. Nyt pureudutaan siihen, että miten siitä löydetään pahimmat pullonkaulat suorituskyvyn osalta.

Profilointi

.NET-maailmassa ohjelmien profilointiin on tarjolla useita eri työkaluja. Tässä kohdin turvaudun Microsoftin luomaan ilmaiseen dotnet traceen, koska sitä on helppo käyttää komentoriviltä, ja tulosten analysoinnin voi tehdä suoraan internet-selaimessa.

Omalla kohdalla ajettava komento on siis

dotnet trace collect --format speedscope -- bin\Release\net8.0\optimoitu_1.exe ..\generointi\measurements.txt

Jossa --format speedscope pitää huolen siitä, että tulokset tallennetaan Speedscope-yhteensopivassa formaatissa.

Profiloinnin kannalta tällainen automaattisesti toimintoja suorittava ohjelma on erinomainen, koska suoritus tapahtuu jokaisella ajolla samalla tavalla, eikä käyttäjän tarvitse itse käyttää ohjelmaa.

Alla kuvankaappaus, jossa näkyvät eniten suoritusaikaa vievät osat Speedscopen Sandwich-valinnalla

Settings Identity

Kuten kuvasta näkyy, menee koodin suorittamisessa ylivoimaisesti eniten aikaa tiedoston sisällön lukemiseen. Tämän jälkeen listauksessa ovat liukulukujen jäsentäminen, rivin jakaminen kahteen osaan ja Dictionaryn käsittely.

Tulevat muutokset

Koska tiedoston lukemisen suorituskykyparannukset vaativat eniten muutoksia koodiin, jätän ne myöhempään kertaan. Aloitan siis pienemmillä muutoksilla, joiden pitäisi kuitenkin nopeuttaa ohjelman suoritusta useammalla prosentilla.

📝