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)