Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Parallel.For me tarda mas que un For Normal, ¿Por que?

Estas en el tema de Parallel.For me tarda mas que un For Normal, ¿Por que? en el foro de .NET en Foros del Web. Hola Foreros !!! Veréis, tengo el siguiente código de Ejemplo, dentro del Load de un WinForm: Código: DateTime dateNow = DateTime.Now; //for (int i = ...
  #1 (permalink)  
Antiguo 24/06/2013, 06:07
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Parallel.For me tarda mas que un For Normal, ¿Por que?

Hola Foreros !!!

Veréis, tengo el siguiente código de Ejemplo, dentro del Load de un WinForm:

Código:
            DateTime dateNow = DateTime.Now;




            //for (int i = 0; i < 100000; i++)
            //{
            //    listBox1.Items.Add("Elemento " + i.ToString());
            //}

            Parallel.For(0, 100000, i =>
            {
                this.Invoke((MethodInvoker)delegate
                {
                    listBox1.Items.Add("Elemento " + i.ToString());
                });
            });



            TimeSpan diffDate = DateTime.Now.Subtract(dateNow);

            MessageBox.Show(diffDate.TotalSeconds.ToString());

Cuando comento el bucle del Parallel.For me tarda unos 3.6 segundos.

Cuando lo ejecuto con el For normal, tarda 3.1 segundos.

¿Saben por que es esto?

Suponía que cuando usas todos los procesadores con la PTL iba todo más deprisa...

Mi proyecto está puesto para que se ejecute en X64, por supuesto.
__________________
Charlie.
  #2 (permalink)  
Antiguo 24/06/2013, 14:01
(Desactivado)
 
Fecha de Ingreso: abril-2013
Mensajes: 70
Antigüedad: 11 años
Puntos: 5
Respuesta: Parallel.For me tarda mas que un For Normal, ¿Por que?

Lo que estas haciendo no tiene sentido.

El Parallel esta pensado para ejecutar tareas en paralelo, pero lo que vos estas haciendo ahi es levantar 10000 tareas en paralelo que lo unico que hacen es tirarle Invoke() al UI Thread.

El UI thread es 1 solo y por lo tanto el unico thread que termina ejecutando tus 10000 tareas.

Podria mejorar si en vez de Invoke() usas BeginInvoke(), aunque el resultado final en terminos de experiencia de usuario es el mismo, ya que el UI thread va a dejar las 10000 tareas encoladas y devolverle el control al Parallel.For(), con lo cual el tiempo que tarda en ejecutar tu codigo va a ser menos, pero el tiempo total en poner los 10000 listboxitems va a ser el mismo.

Por otro lado, como estas usando winforms, que es un framework horriblemente viejo, deprecado y lento, tu codigo tarda mucho mas que lo que tardaria si estuvieras usando un UI framework moderno que soporte virtualizacion de la UI y aceleracion por hardware, como WPF.

Esto es a lo que me refiero:
http://www.youtube.com/watch?v=D3Y6DnFpHCA
  #3 (permalink)  
Antiguo 25/06/2013, 01:30
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Parallel.For me tarda mas que un For Normal, ¿Por que?

Gracias. Entendido. Alto y claro. : )
__________________
Charlie.

Etiquetas: tarda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:38.