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 字符串和list的功能翻译
    python .strip()
    python 查看对象功能
    python 字典
    洛谷 P1144 最短路计数 Label:水
    心疼自己,再见
    初赛复习 //附复习资料
    51Nod 1079 中国剩余定理 Label:数论
    转载 乘法逆元
    51Nod 1136 欧拉函数 Label:数论
  • 原文地址:https://www.cnblogs.com/Zhengxue/p/6141592.html
Copyright © 2011-2022 走看看