• .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都要高


  • 相关阅读:
    火狐黑客插件
    使用POI对EXCEL 读入写出
    使用spring quartz实现定时任务
    toad for oracle 快捷键总结
    Oracle查询性能优化
    2.C语言中文网学习Python
    1.编程基础(C语言中文网)
    一键打开ASP.NET WEB网站项目
    解决VS2010无法添加Sql Server数据库的问题
    VS2010 的一个小Bug(已报告给Microsoft Connect并得到确认)
  • 原文地址:https://www.cnblogs.com/hueychan/p/10575907.html
Copyright © 2020-2023  润新知