zoukankan      html  css  js  c++  java
  • .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都要高


  • 相关阅读:
    收集一些网络检测和分析工具
    编程经验分享(转自银总的建议)
    代码着色和windows live writer真好
    pku1063 Flip and Shift严格证明
    So Many Skirt
    一些网址
    c++编写的算24程序
    一道简单的回溯搜索题
    windows程序设计第二章Unicode简介
    字符,字节和编码
  • 原文地址:https://www.cnblogs.com/hueychan/p/10575907.html
Copyright © 2011-2022 走看看