Pongo un tema tecnico.
Uso spesso le Collection al posto di Array, questi 2 tipi di oggetto, differenti, hanno performances molto diverse a seconda di come vengono impiegate.
Chiaramente la differenza non si nota in azioni singole, ma su azioni massive.
Le differenze più corpose che rilevo, sono nelle azioni di Aggiunta, e di Ricerca.
Ora sia sugli Array che sulle collection si apre un capitolo a parte, entrambi offrono prestazioni differenti in fase di Aggiunta a seconda di:
1) Array Statico o Dinamico
2) Collection con o senza l'uso della Key
In sostanza ho che:
Array Dinamico (ridimensionabile a Runtime con Redim Preserve)
AGGIUNTA Lento
RICERCA, essendo già dimensionato basta ciclare, è relativamente veloce
Array Statico
AGGIUNTA Molto veloce, direi l'oggetto più performante, peccato non sia flessibile e sapere Ubound non sempre è noto.
RICERCA come sopra
Collection Senza uso di KEY
AGGIUNTA Un poco Lenta, ma a metà tra Array Statico e Dinamico
RICERCA Lentissima da non usare in ciclo indicizzato, se si usa For...each invece è confrontabile con Array
Collection con uso di KEY
AGGIUNTA Lenta, circa x10 rispetto all'array dinamico e x20 rispetto allo statico
RICERCA Molto Veloce, si sfrutta l'indicizzazione della KEY String, oggetto più veloce
Un Test su 100000 Iterazioni, ovviamente ho cercato l'ultimo Item inserito:
ADDITEMS
ReDimArray 100000 items in 0,04296875 seconds.
NO ReDimArray 100000 items in 0,0234375 seconds.
Collect NOKey 100000 items in 0,03515625 seconds.
CollectionKey 100000 items in 0,4453125 seconds.
SEARCH
Find Array : I100000 in 0,03515625 seconds.
Find Coll NoKey I100000 in 35,59375 seconds (usando ciclo indicizzato su Item)
Find Coll NoKey I100000 in 0,0332569 seconds (usando For Each)
Find Coll. Key I100000 in 0 seconds.
Se passiamo ad un Test su 1000000 di dati:
ADDITEMS
ReDimArray 1000000 items in 0,8945313 seconds.
NO ReDimArray 1000000 items in 0,203125 seconds.
Collect NOKey 1000000 items in 0,3710938 seconds.
CollectionKey 1000000 items in 5,105469 seconds.
SEARCH
Find Array : I1000000 in 0,3320313 seconds.
Find Coll. Key I1000000 in 0 seconds.
Detto questo ognuno in base a quello che deve fare si orienta, purtroppo non sempre si conosce a priori quanti elementi devono essere inseriti, quindi l'uso di Array Statico risulta meno indicato, e quello dinamico in caso di Inserimento è lento.
Tutto questo pippone, perchè per quello che serve a me devo avere la massima velocità nella ricerca, quindi devo usare Collection con l'uso della KEY, e volevo migliorare sensibilmente la velocità di inserimento che come si vede dai test è circa 10 volte superiore a quella di un'array.
Ricordo che nel sito comune di VB6, per i vecchi come me lo ricordano sicuramente, AntonioG ne sono certo(intendo che lo ricordi non che sei vecchio ), era stato pubblicato un demo di una ClasseCollection che sfruttava un Mix dei 2 Oggetti ed otteneva ottimi risultati in termini di performance.
Purtroppo il sito è saltato da parecchio ed io non trovo più nulla, quindi speravo in qualcuno che ricordasse la logica seguita, o se avesse un'idea da suggerire, per sviluppare questa cosa e provare a ricostruire qualche cosa di funzionale.