为什么以下indexed parallel.foreach
与正常的顺序循环相比几乎慢两倍?它与资源争用有关吗?
static void Main(string[] args)
{
var values = Enumerable.Range(0, 100000).Select(v => v+v);
Stopwatch s = Stopwatch.StartNew();
//int index = 0;
//foreach (double value in values)
//{
// Console.WriteLine("{0}:\t{1}", index, value);
// index++;
//}
Parallel.ForEach(values, (value, pls, index) =>
{
Console.WriteLine("{0}:\t{1}", index, value);
index++;
});
Console.WriteLine(s.Elapsed.TotalMilliseconds);
Console.ReadLine();
}
答案 0 :(得分:14)
Console
一次只能实际执行一个Write
,所以你的第二个版本花了很多时间创建多个线程,为每个线程安排工作,然后只有其中一个人坐在那里等着其他人,直到他们全部完成。您可以获得多线程的所有开销,而且没有任何好处,因为您并非实际并行执行任何工作。