Parallel.ForEach() 并行循环

    xiaoxiao2022-06-23  17

    Parallel.ForEach() 并行循环 http://blog.csdn.net/keyrainie/article/details/7679971 现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。 微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。 Parallel.ForEach()和Parallel.For()就是微软并发类的成员。 今天做了一个简单的测试,我的电脑是双核的,效果还是比较明显的。 一般的for和foreach循环用时都在10秒钟;并发for循环在0.5秒,并发foreach在0.1秒钟。 但是并发循环不能滥用,在简单的少次数循环下,并发循环可能会体现不出其优势。 下面是简单的测试代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace parallelForeach {     class Program     {         static void Main(string[] args)         {             DateTime startTime;             TimeSpan resultTime;             List<entityA> source = new List<entityA>();             for (int i = 0; i < 100; i++)             {                 source.Add(new entityA                 {                     name = "悟空" + i,                     sex = i % 2 == 0 ? "男" : "女",                     age = i                 });             }             startTime = System.DateTime.Now;             loop1(source);             resultTime = System.DateTime.Now - startTime;             Console.WriteLine("一般for循环耗时:" + resultTime);             startTime = System.DateTime.Now;             loop2(source);             resultTime = System.DateTime.Now - startTime;             Console.WriteLine("一般foreach循环耗时:" + resultTime);             startTime = System.DateTime.Now;             loop3(source);             resultTime = System.DateTime.Now - startTime;             Console.WriteLine("并行for循环耗时:" + resultTime.Milliseconds);             startTime = System.DateTime.Now;             loop4(source);             resultTime = System.DateTime.Now - startTime;             Console.WriteLine("并行foreach循环耗时:" + resultTime.Milliseconds);             Console.ReadLine();         } //普通的for循环         static void loop1(List<entityA> source)         {             int count = source.Count();             for (int i = 0; i < count; i++)             {                 System.Threading.Thread.Sleep(100);             }         } //普通的foreach循环         static void loop2(List<entityA> source)         {             foreach (entityA item in source)             {                 System.Threading.Thread.Sleep(100);             }         } //并行的for循环         static void loop3(List<entityA> source)         {             int count = source.Count();             Parallel.For(0, count, item =>             {                 System.Threading.Thread.Sleep(100);             });         } //并行的foreach循环         static void loop4(List<entityA> source)         {             Parallel.ForEach(source, item =>             {                 System.Threading.Thread.Sleep(100);             });         }     } //简单的实体     class entityA     {         public string name { set; get; }         public string sex { set; get; }         public int age { set; get; }     } }
    转载请注明原文地址: https://ju.6miu.com/read-1123133.html

    最新回复(0)