class Program { static void Main(string[] args) { List<entityA> source = new List<entityA>(); for (int i = 0; i < 20; i++) { source.Add(new entityA { name = "悟空" + i, sex = i % 2 == 0 ? "男" : "女", age = i }); } Stopwatch Watch3 = new Stopwatch(); Watch3.Start(); loop2(source); Watch3.Stop(); Console.WriteLine("一般foreach循环耗时:" + Watch3.ElapsedMilliseconds); Stopwatch Watch5 = new Stopwatch(); Watch5.Start(); loop4(source); Watch5.Stop(); Console.WriteLine("并行foreach循环耗时:" + Watch5.ElapsedMilliseconds); Console.ReadLine(); } //普通的foreach循环 static void loop2(List<entityA> source) { foreach (entityA item in source) { item.age = +10; System.Threading.Thread.Sleep(3);//毫秒 } } //并行的foreach循环 static void loop4(List<entityA> source) { Parallel.ForEach(source,new ParallelOptions { MaxDegreeOfParallelism=Environment.ProcessorCount}, item => { item.age = item.age + 10; System.Threading.Thread.Sleep(3); }); } // 0 1 2 5 10 100 500 10000 10000 Environment.ProcessorCount*4 10000 Environment.ProcessorCount*2 //一般foreach循环耗时 0 38 58 119 218 2011 10000 20010 20010 20008 //并行foreach循环耗时 97 84 65 68 92 564 2500 5080 4055 4087 } //简单的实体 class entityA { public string name { set; get; } public string sex { set; get; } public int age { set; get; } }
2毫秒以上可以用并行