Imbunatatirea performantei la citire

 

Ce am remarcat este ca obtinerea resurselor se poate face pe cite un thread separat ( dupa prima care iti da numarul de pagini)

Asta e bine – si am transformat codul secvential intr-un unul pe thread / task ( Vedeti si o problema pe care am rezolvat-o cu diferenta intre List<T> si ConcurrentBag<T> aici: http://msprogrammer.serviciipeweb.ro/2017/05/22/task-and-generic-list/)

Am instalat https://github.com/dotnet/BenchmarkDotNet si am inceput sa fac teste de performanta. Nu a fost greu, dat fiind ca aveam deja teste automate – am modificat un pic clasa:

 

Pentru citirea de pe hard secvential:

Method Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
GetAndInterpretData 532.5 ms 68.21 ms 3.854 ms 25604.1667 7375.0000 2791.6667 8.12 KB

 

Pentru citirea de pe hard cu task

Method Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
GetAndInterpretData 435.1 ms 56.27 ms 3.179 ms 31000.0000 8229.1667 2729.1667 8.12 KB

Puteti observa chestii de baza:

1. E mai bine cu Task ca timp ( desi , daca fac Mean+Error la task , da mai mare decit Mean-Error la secvential – totusi,  cu 27 ms )

2. Alocarea de obiecte e mai mare la Task

 

Am facut si pentru citirea de la WorldBank API pe http, insa aici mi-au dat tot felul de erori de http ( de la 500 la 404 ) . Asa ca nu  am putut face benchmark . Si mi-a dat o noua idee – retry on task ( asta , data viitoare)