Pues eso… aunque esto ya es algo viejo, y se supone que sabido, el otro día no lo recordé y revisando el código de un procedimiento que, a pesar de tratar con muchos registros de una base de datos de SQL Server, veía que tardaba demasiado… y mientras estaba trabajando el método me entretuve en ver la ventana esa de diagnóstico en la que te muestra todo lo que iba haciendo el código (ver la figura 1), y me percaté que repetía fechas…
Al principio no caí en porqué lo hacía, así que… me puse a revisar el código con las llamadas a las actualizaciones a la base de datos… y al cabo de un rato caí en que estaba usando un bucle For Each y que la variable de ese bucle era un objeto de la clase que se encarga de actualizar los datos (e incluso de crearlos si no existen en la base de datos) y… ¡se me encendió la bombillita esa de… idea!
Fue cambiarlo a un bucle normal y tardar muchísimo menos , creo que una de las veces me llegó a tardar más de media hora y al hacer el cambio se quedó en 4 minutos o menos.
Y el cambio que hice fue, por ejemplo (en VB), de este:
For Each p In Productos
a este otro:
For i = 0 To Productos.Count - 1
Dim p = Productos(i)
Nota:
El problema de los bucles for each no es solo de Visual Basic, también lo es de C# aunque se escriba de otra forma.
Y lo cuento aquí para que cuando busque «problemas» me de la solución.
Es que, por si no lo sabes, cuando no recuerdo cómo hacer algo en VB o C#, busco en Google, pero le añado al final elguille para que salgan los resultados que tengo publicados y, salvo excepciones, encuentro siempre lo que busco , así que… ya sabes…
Nos vemos.
Guillermo