Sorprendentemente, el uso de PLINQ no produjo beneficios en un pequeño caso de prueba que creé; de hecho, fue incluso peor de lo habitual LINQ.PLINQ realiza peor de lo habitual LINQ
Aquí está el código de prueba:
int repeatedCount = 10000000;
private void button1_Click(object sender, EventArgs e)
{
var currTime = DateTime.Now;
var strList = Enumerable.Repeat(10, repeatedCount);
var result = strList.AsParallel().Sum();
var currTime2 = DateTime.Now;
textBox1.Text = (currTime2.Ticks-currTime.Ticks).ToString();
}
private void button2_Click(object sender, EventArgs e)
{
var currTime = DateTime.Now;
var strList = Enumerable.Repeat(10, repeatedCount);
var result = strList.Sum();
var currTime2 = DateTime.Now;
textBox2.Text = (currTime2.Ticks - currTime.Ticks).ToString();
}
El resultado?
textbox1: 3437500
textbox2: 781250
Por lo tanto, LINQ toma menos tiempo que PLINQ para completar una operación similar.
¿Qué estoy haciendo mal? ¿O hay un giro que no conozco?
Editar: He actualizado mi código para usar el cronómetro y, sin embargo, el mismo comportamiento persistió. Para descontar el efecto de JIT, lo intenté algunas veces haciendo clic en button1
y button2
y sin ningún orden en particular. Aunque el tiempo que llegué podría ser diferente, pero el comportamiento cualitativo se mantuvo: PLINQ fue de hecho más lento en este caso.
Consejo: Utilice la clase 'Cronómetro' para medir el rendimiento. Será más preciso para medir períodos de tiempo que 'DateTime.Now'. – Greg
@ Anthony Pegram, ¿cómo es eso? Puedo ver fácilmente lo que cada tipo será. – CaffGeek
¿Podría decirnos en qué hardware está ejecutando esto? –