Удивительно, но использование PLINQ не принесло преимуществ в небольшом тестовом случае, который я создал; на самом деле, это было даже хуже обычного LINQ.
Здесь тестовый код:
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();
}
Результат?
textbox1: 3437500
textbox2: 781250
Итак, LINQ занимает меньше времени, чем PLINQ, чтобы выполнить аналогичную операцию!
Что я делаю неправильно? Или есть твист, о котором я не знаю?
Изменить: я обновил свой код, чтобы использовать секундомер, и тем не менее, такое же поведение сохраняется. Чтобы уменьшить эффект JIT, я на самом деле пробовал несколько раз, нажимая оба button1
и button2
и не в определенном порядке. Хотя время, которое я получил, может быть другим, но качественное поведение оставалось: PLINQ в этом случае был медленнее.