Ho una applicazione che ad un certo punto analizza una serie di blocchi di testo per trovare dei pattern e deve restituire una lista univoca di stringhe che matchano. La prima implementazione è stata di fare una List<String> ed ad ogni match fare un List.Contains ed aggiungere solo quando la stringa non compare già.
Faccio i miei bei unit test ma quando metto in produzione mi accorgo che i dati su cui si lavora sono molto di più di quello che mi attendevo, io mi attendevo nell'ordine delle centinaia di match, mentre invece siamo nell'ordine delle decine di migliaia....su un caso reale ho circa 9 minuti di orologio per fare i match. Inizialmente ho pensato che con parti di testo cosi grandi fossero le regex a dare problemi poi ho usato le powercollection di ricther usando un OrderedSet<String>, il risultato è che il tempo decresce a circa 40 secondi.
Questo ci fa capire che la List<T> non è assolutamente performante quando si parla di fare contains su insiemi molto grandi di elementi, le Powercollection sono sempre una buona soluzione ad impatto praticamente zero.
alk.
Tags: PowerCollection " rel=tag>List