Study of performance improvements in a legacy reporting framework : by means of threading and code refactoring
Nylund, Markus (2023)
Nylund, Markus
2023
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2023120634831
https://urn.fi/URN:NBN:fi:amk-2023120634831
Tiivistelmä
Tutkimuksen kohteena oli selvittää, onko mahdollista parantaa legacy raportointikehyksen suorituskykyä sekä aikaa käyttäen säikeistystä ja refaktoroimalla olemassa olevaa koodia tehokkaammaksi samalla kun seurattiin resurssien käyttöä ja varmistettiin toimiva ja luotettava koodi.
Tutkimuskohdetta lähestyttiin hajota ja hallitse -menetelmällä, jossa aikaa mittaavia ajastimia upotettiin koodiin ja niiden tulokset kirjattiin logi tiedostoihin hitaan koodin paikantamiseksi, lisäksi seurattiin kehyksen suorittamia SQL-kyselyjä.
Testijoukko luotiin satunnaisilla asiakas-, tili-, talletus- ja tapahtumatiedoilla käyttäen Bitcoinin arvopäiviä arvopapereina. Luodut tilit hajautettiin muutaman vuoden ajanjaksoon luodakseen lisää tietokantakomp-leksisuutta SQL-kyselyille.
.NETin rinnakkaiskirjastoja käytettiin säikeistyksen luontiin olemassa olevaan VB .NET -koodikantaan samalla kun tehtiin yleisiä vähäisempiä suorituskyvyn parannuksia. Olemassa oleva virheidenkäsittely säily-tettiin, ja vain vähäisiä muutoksia tehtiin rinnakkaiskirjastojen vuoksi.
Muutokset johtivat noin 55%: n suorituskyvyn parantumiseen kahdella säikeellä verrattuna yhteen säi-keeseen sekä keskimäärin kaksinkertaistaen resurssien käytön. Tuloksia käytetään perustana kehyksen tuleville kehityksille. The subject was to research if it was feasible to improve the performance and runtime of a legacy reporting framework with multithreading and refactoring existing code to be more efficient while monitoring resource usage and ensuring functional and reliable code.
The subject was approached with a divide- and conquer approach with timers embedded into the code and logging their result to pinpoint slow code in addition to monitoring SQL queries the framework was executing.
A testing set was generated with random data of customers, accounts, deposits, and transactions using Bitcoins rate dates as securities. The generated accounts were scattered over a period of a few years to introduce more database complexity for SQL queries.
.NET parallel libraries were used to apply multithreading logic into the existing VB.NET codebase while doing general minor performance increasing improvements. Existing error handling was maintained, and only minor changes were done because of the parallel libraries.
The changes resulted in an improvement of around 55% increased performance with 2 threads compared to a singular thread, while averagely doubling resource consumption. Results will be used as a base for future developments on the framework.
Tutkimuskohdetta lähestyttiin hajota ja hallitse -menetelmällä, jossa aikaa mittaavia ajastimia upotettiin koodiin ja niiden tulokset kirjattiin logi tiedostoihin hitaan koodin paikantamiseksi, lisäksi seurattiin kehyksen suorittamia SQL-kyselyjä.
Testijoukko luotiin satunnaisilla asiakas-, tili-, talletus- ja tapahtumatiedoilla käyttäen Bitcoinin arvopäiviä arvopapereina. Luodut tilit hajautettiin muutaman vuoden ajanjaksoon luodakseen lisää tietokantakomp-leksisuutta SQL-kyselyille.
.NETin rinnakkaiskirjastoja käytettiin säikeistyksen luontiin olemassa olevaan VB .NET -koodikantaan samalla kun tehtiin yleisiä vähäisempiä suorituskyvyn parannuksia. Olemassa oleva virheidenkäsittely säily-tettiin, ja vain vähäisiä muutoksia tehtiin rinnakkaiskirjastojen vuoksi.
Muutokset johtivat noin 55%: n suorituskyvyn parantumiseen kahdella säikeellä verrattuna yhteen säi-keeseen sekä keskimäärin kaksinkertaistaen resurssien käytön. Tuloksia käytetään perustana kehyksen tuleville kehityksille.
The subject was approached with a divide- and conquer approach with timers embedded into the code and logging their result to pinpoint slow code in addition to monitoring SQL queries the framework was executing.
A testing set was generated with random data of customers, accounts, deposits, and transactions using Bitcoins rate dates as securities. The generated accounts were scattered over a period of a few years to introduce more database complexity for SQL queries.
.NET parallel libraries were used to apply multithreading logic into the existing VB.NET codebase while doing general minor performance increasing improvements. Existing error handling was maintained, and only minor changes were done because of the parallel libraries.
The changes resulted in an improvement of around 55% increased performance with 2 threads compared to a singular thread, while averagely doubling resource consumption. Results will be used as a base for future developments on the framework.