zoukankan      html  css  js  c++  java
  • C#并行

           /// <summary>
            ///该实现方式并不是最高效的
            ///只是举个例子,说明用锁来保护共享状态
            /// </summary>
            /// <param name="values"></param>
            /// <returns></returns>
            static int ParallelSum(IEnumerable<int> values)
            {
                object mutex = new object();
                int result = 0;
                Parallel.ForEach(
                    source: values,
                    localInit: () => 0,
                    body: (item, state, localValue) => localValue + item,
                    localFinally: lovalValue =>
                    {
                        lock (mutex)
                        result += lovalValue;
                    }
                    );
                return result;
            }

       static int ParallelSum2(IEnumerable<int> values)
            {
                return values.AsParallel().Aggregate(seed: 0, func: (sum, item) => sum + item);
            }
     
     
            static int ParallelSum1(IEnumerable<int> values)
            {
                return values.AsParallel().Sum();
            }
    

        static void Main(string[] args)
            {
     
     
                for (int i = 0; i < 10; i++)
                {
                    int[] nums = { 1, 23, 12, 31, 23, 12, 312, 3, 123, 12, 3 };
                    Stopwatch sw = new Stopwatch();
                    sw.Start();
                    Console.WriteLine("ParallelSum:" + ParallelSum(nums));
                    sw.Stop();
                    TimeSpan ts = sw.Elapsed;
                    Console.WriteLine(ts.TotalMilliseconds);
     
                    Stopwatch sw1 = new Stopwatch();
                    sw1.Start();
                    Console.WriteLine("ParallelSum1:" + ParallelSum1(nums));
                    sw1.Stop();
                    TimeSpan ts1 = sw1.Elapsed;
                    Console.WriteLine(ts1.TotalMilliseconds);
     
                    Stopwatch sw2 = new Stopwatch();
                    sw2.Start();
                    Console.WriteLine("ParallelSum2:" + ParallelSum2(nums));
                    sw2.Stop();
                    TimeSpan ts2 = sw2.Elapsed;
                    Console.WriteLine(ts2.TotalMilliseconds);
     
                }
            }


          

    
    

        总结:

         第一次运行:ParallelSum2 比 ParallelSum1 ParallelSum 快几倍左右

         第二次开始:ParallelSum2总体比ParallelSum1 ParallelSum快

         所以运用Aggregate()聚合功能 good

    好好学习,天天向上。
  • 相关阅读:
    【自动化测试不求人】python自动化测试对xml文件操作
    【自动化测试不求人】python自动化测试对json操作大全
    【自动测试不求人】每日1例无人值守自动化测试异常处理
    自动化测试不求人系列selenium自动化测试键盘事件ActionChains
    【自动化测试不求人】selenium ddt数据驱动模块
    国内常用NTP服务器地址及IP
    Centos语言问题
    linux下创建用户并设置密码
    CCNA Day1
    虚拟光驱导致无法安装光驱驱动的解决方法
  • 原文地址:https://www.cnblogs.com/Zhengxue/p/6141592.html
Copyright © 2011-2022 走看看