.NET中的简单的并行循环Parallel.For和Parallel.ForEach

这里简单的介绍一下.net中的任务并行库。简单的并行循环Parallel.For和Parallel.ForEach。我们常见的for和foreach循环分别对应并行循环Parallel.For和Parallel.ForEach。

参考文档:https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.parallel_methods(v=vs.110).aspx

对比for循环和Parallel.For的性能

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            int[] nums=new int[100];
            for (int j = 0; j < 100; j++)
            {
                nums[j] = j * 100000 + j;
            }
            Debug.WriteLine(string.Format("循环开始:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            for (int i = 0; i < nums.Length; i++)
            {
                LoopRun(nums[i]);
            }
            //Parallel.For(0, nums.Length, i=>LoopRun(nums[i]));
            Debug.WriteLine(string.Format("循环结束:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            Console.ReadKey(); //暂停
        }
        static void LoopRun(int num)
        {
            for (int i = 0; i < num; i++)
            {
                if (i == num - 1)
                    ;//Debug.WriteLine("循环" + num);
            }
        }

执行代码,得到使用for循环从0到100的执行时间为:1845ms

循环开始:   0ms
循环结束:1,845ms

取消Parallel.For的注释代码,注释for循环,看看Parallel.For的执行时间为494ms

循环开始:   0ms
循环结束: 494ms
可以看到这个并行执行的效率是非常高的

对比foreach循环和Parallel.ForEach

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            int[] nums = new int[100];
            for (int j = 0; j < 100; j++)
            {
                nums[j] = j * 100000 + j;
            }
            Debug.WriteLine(string.Format("循环开始:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            foreach (var item in nums)
            {
                LoopRun(item);
            }
            //Parallel.ForEach(nums, i => LoopRun(i));
            Debug.WriteLine(string.Format("循环结束:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            Console.ReadKey(); //暂停
        }
        static void LoopRun(int num)
        {
            for (int i = 0; i < num; i++)
            {
                if (i == num - 1)
                    ;//Debug.WriteLine("循环" + num);
            }
        }
执行代码,得到使用foreach循环从0到100的执行时间为:1832ms
循环开始:   0ms
循环结束:1,832ms

取消Parallel.ForEach的注释代码,注释foreach循环,看看Parallel.ForEach的执行时间为394ms

循环开始:   0ms
循环结束: 394ms
可以看到这个并行执行的效率是非常高的,貌似比for循环和Parallel.For都要高


posted @ 2018-04-05 22:01  huey-chan  阅读(666)  评论(0编辑  收藏  举报