el Guille, la Web del Visual Basic, C#, .NET y más...

Cuidadín con los For Each si se modifica el objeto del bucle

 
Publicado el 19/May/2019
Actualizado el 20/May/2019
Autor: Guillermo 'guille' Som

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… (publicado en mi blog)




 

Este contenido está obtenido de mi blog, la URL original es:
Cuidadín con los For Each si se modifica el objeto del bucle

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…

Ventana de las herramientas de diagnóstico de Visual Studio
Figura 1. La ventana de las Herramientas de diagnósticos de Visual Studio.

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 Light bulb de… idea!

Fue cambiarlo a un bucle normal y tardar muchísimo menos Eye rolling smile, 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 Flirt male, así que… ya sabes… Winking smile

Nos vemos.
Guillermo



 


La fecha/hora en el servidor es: 21/11/2024 7:24:25

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024