La fase di ottimizzazione del codice, relativamene a performance e uso di risorse, è una parte, IMHO, noiosa e divertente allo stesso tempo. Noiosa perchè la fasi di rilevamento dati come profiling e measuring non sono le mie preferite, divertente perchè il tuning del codice che ne scaturisce insegna sempre qualcosa di nuovo. Questo perchè ci costringe ad uscire dai canoni di codice "ordinari". Oggi ho avuto un'altra dimostrazione di questo fatto.
Il tempo di esecuzione di un ciclo di ricerche all'interno di una collection tipizzata era troppo alto, questo perchè usavo il metodo Contains. Cercando meglio tra i metodi della classe Array, mi imbatto nel metodo BynarySearch. La differenza tra i 2 approcci è la modalità di ricerca. Mentre il primo metodo effettua una ricerca sequenziale, il secondo effettua una ricerca dicotomica. Ovviamente, il primo funziona in ogni caso mentre il secondo solo in caso di collection ordinate. Il problema nel mio caso non si è posto poichè la collection era caricata da DB, altrimenti avrei dovuto utilizzare il Sort ma con un degrado enorme.
Comunque per darvi un'idea della velocità che si ha usando il BynarySearch rispetto al Contains e all'IndexOf, ecco una tabella comparativa.
1000 elementi | 10000 elementi | |
Contains | 0.016467 | 1.586318 |
IndexOf | 0.014322 | 1.670793 |
BinarySearch | 0.000758 | 0.011789 |
Da questa tabella si nota che più sono gli elementi, più le performance migliorano con il BinarySearch.
Forse ho scoperto l'acqua calda, in fondo ci vuole poco a capire che una lista ordinata è più veloce da cercare, ma questo tassello mi mancava proprio.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Entity Framework è lento! mmmmh, probabilmente sei tu che lo stai usando male!, il 7 ottobre 2022 alle 10:55
- Cosa penso di ASP.NET vNext, il 3 settembre 2014 alle 09:00
- E così AngularJS e DurandalJS convergono..., il 7 maggio 2014 alle 11:51
- Usare fiddler per simulare le risposte da un servizio, il 28 ottobre 2013 alle 08:00
- Tip: cosa fare quando Entity Framework Code-First Migrations smette di funzionare, il 18 gennaio 2013 alle 11:04
- Visual Studio 11 beta: le novità di Entity Framework 5.0 e WCF 4.5, il 2 marzo 2012 alle 23:08