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


  • 相关阅读:
    win7下安装配置tomcat,java运行环境
    Ubuntu 12.10安装配置JDK7环境
    全面介绍Linux终端命令
    Ubuntu 配置 Tomcat
    Linux手动导入导出mysql数据库
    navicat数据库管理软件(支持mysql,oracle,sqlserver,sqlite,postgreSQL)
    信号量(semaphore)和互斥量(mutex)
    最新版fcitx 4.1.2源码编译安装(ubuntu 10.04)
    Groovy动态语言简介
    读书笔记:《java脚本编程:语言、框架与模式》(2)jvm内部的脚本语言
  • 原文地址:https://www.cnblogs.com/hueychan/p/10575907.html
Copyright © 2011-2022 走看看