Developer's Diary

7 mayo, 2011

Optimizando poco nuestro codigo c#

Filed under: .net, ASP.Net, BBDD, Curso C#, Programación — jnavero @ 12:01 PM

—- Nos mudamos: http://devthisblog.namocode.es
—————————————————————–
Desde hace algún tiempo siempre estamos discutiendo sobre el for y el for each cuales mejor o mas rápido. El por que no es recomendado utilizar el Asterisco en una select, pequeñas cosas que pueden hacernos ganar un poco de tiempo o ganar memoria de cara a la ejecución de un programa, para esto voy a ir escribiendo una serie de artículos según vaya teniendo tiempo para escribirlos. En este primero hablaré del For y Foreach, Este articulo está  en uno que leí hace mucho tiempo de CodeProject, espero que les sea de utilidad.

Lo primero es explicar la diferencia entre un For y un For Each, para esto nos ayudamos para esto de la wikipedia:

For: Es una estructura de control en la que podemos indicar un numero máximo de iteraciones

PARA i := 0 a CantidadRegistros(tabla) - 1, PASO = 1
 PróximoRegistro(tabla)
 HacerAlgo(ElementoActual(tabla))
FIN PARA

For Each: Este bucle es una evolución del concepto del bucle Para en algunos lenguajes. Se utiliza para recorrer estructuras repetitivas de datos de forma más simple y ágil

POR CADA x DE tipo EN Vector HACER
 x = AlgunaOperación(x)
FIN PARA

Como vemos, y según nuestra wikipedia el bucle for each es realmente útil sobre todo para su uso en colecciones

Si lo vemos así, parece que las diferencia son obvias. Pero veamos con mayor profundidad:

Midiendo el tiempo de ejecución de un ejemplo:

He creado un ejemplo en c# con los dos For. Ademas, utilizo el espacio de nombres de System.Diagnostic para poder hacer una medición de tiempo de ejecución mediante la clase StopWatch. Pego el ejemplo a continuación y posteriormente los resultados.

        private void button1_Click(object sender, EventArgs e)
        {
            string []prueba = new string[256];
            string prueba2 = "";

            prueba2 = "";

            var timer2 = Stopwatch.StartNew();

            foreach (string c in prueba)
            {
                prueba2 = prueba2 + c;
            }
            timer.Stop();

            string tiempo = string.Format("Tiempo en Ticks: {0}", timer.ElapsedTicks);

            var timer2 = Stopwatch.StartNew();

            for (int a = 0; a < 256; a++)
            {
                prueba2 = prueba2 + prueba[a];
            }
            timer2.Stop();
            string tiempo2 = string.Format("Tiempo en Ticks: {0}", timer2.ElapsedTicks);
        }

El resultado que me da en mi equipo es 14 ticks para el foreach y 10 para el for normal. Realmente como mejor se ve esto es haciendo for con una gran cantidad de números de iteraciones, es decir, si vamos a hacer algo pequeño, la diferencia es mínima e incluso en la ejecución que he puesto hay muchos factores que pueden haber influido a la hora de hacer el calculo.

Si seguimos indagando un poco mas, podemos ver el desensamblado con las instrucciones que se generan no las voy a comentar por que la ultima vez que intenté explicar esto en una conferencia aburrí a las moscas…


A continuación dejo las instrucciones que se ejecutan al crear un foreac.

Como vemos a simple vista el for each genera mas instrucciones por lo que después tarda un pelin mas que el for.

Con esto podemos llegar a diversas conclusiones:

– Personalmente uso For each por que me agiliza muchísimo la labor de programar y muchas veces se entiende mejor el código que con el For

– El for es ligeramente mas rápido que el foreach

– Si se trabaja con aplicaciones pequeñas, bases de datos pequeñas la diferencia no se notará pero, si es al contrario, es decir tenemos miles de lineas de código y constantes bucles, puede que si se note…

El próximo post hablare un poco del SQL.

Nota: Articulo basado en.  http://www.codeproject.com/KB/cs/foreach.aspx

Saludos a todos.

Anuncios

1 comentario »

  1. Por favor explícalas…me interesa!. Es claro, muchos programadores se limitan a ver que las cosas mediocremente funcionen no a comprender como funcionan… Así mismo es la producción! Luego se preguntan por qué el computador va tan lento…

    De antemano mil gracias.

    Comentario por fernando pvoeda — 18 julio, 2012 @ 6:53 PM


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: