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

.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(…

这里简单的介绍一下.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都要高

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/35505.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注