Oggi sono rimasto allibito dalle performance di IdMap rispetto al loop su collection.
Una procedura faceva
- Code: Select all
foreach ext in collectionEsterna
{
id document foundObject = null
foreach int in collectionInerna
{
if int.code = ext.code
foundObject = int
if foundObject
{
fai delle cose su foundObject
}
}
}
e stava minuti
L'ho cambiata sostituendo l'inner loop con una ricerca in una idMap, tipo così
- Code: Select all
//riscrivo come mappa la collection interna
foreach int in collectionInerna
{
mapInterna.setObject(int.code, int)
}
foreach ext in collectionEsterna
{
id document foundObject =null
foundObject = mapInerna.getObject(ext.code)
if foundObject
{
fai delle cose su foundObject
}
}
}
Questa seconda versione impiega meno di un secondo e fa tutto correttamente.
Qual è il limite oltre il quale è meglio usare collection? LA IdMap è tutta in memoria? Nel mio caso avevo collection di 1000 elementi, quindi il nested loop andava sul milione di iterazioni (1000x1000) ed era inchiodato, con la idMap è divenuto quasi istantaneo.
Se penso a quanti nested foreach ho scritto con Inde negli ultimi anni mi viene male...
Che ne dite?