• 编写高质量代码改善C#程序的157个建议——建议88:并行并不总是速度更快


    建议88:并行并不总是速度更快

    并行所带来的后台任务及任务的管理,都会带来一定的开销,如果一项工作本来就能很快完成,或者说循环体很小,那么并行的速度也许会比非并行要慢。

    看这样一个例子,我们比较在同步和并行状态下的时间消耗:

    static void Main(string[] args)  
    {  
        Stopwatch watch = new Stopwatch();  
        watch.Start();  
        DoInFor();  
        watch.Stop();  
     
        Console.WriteLine("同步耗时:{0}", watch.Elapsed);  
     
        watch.Restart();  
        DoInParalleFor();  
        watch.Stop();  
        Console.WriteLine("并行耗时:{0}", watch.Elapsed);  
     
        Console.ReadKey();  
    }  
     
    static void DoSomething()  
    {  
        for (int i = 0; i < 10; i++)  
        {  
            i++;  
        }  
    }  
     
    static void DoInFor()  
    {  
        for (int i = 0; i < 200; i++)  
        {  
            DoSomething();  
        }  
    }  
     
    static void DoInParalleFor()  
    {  
        Parallel.For(0, 200, (i) =>
        {  
            DoSomething();  
        });  
    } 


    以上代码在笔者当前的双核PC机上的输出为:
    同步耗时:00:00:00.0005583  
    并行耗时:00:00:00.0033604


    可见,同步只用了0.55毫秒,而并行则使用了3.3毫秒才完成工作。

    现在,为了模拟让循环体做更多事情,将DoSomething方法中的循环体由10变为10000000。运行的结果为:
    同步耗时:00:00:01.3059138  
    并行耗时:00:00:00.6560593


    当循环体需要做更多工作的时候,我们发现,同步需要1.3秒才能完成工作,而并行则仅使用0.6秒就完成了工作。

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    面向对象总结
    面向对象进阶
    day21
    组合、封装、多态
    作业20
    继承、派生、新式类与经典类
    作业
    面向对象基础
    代码统计小程序
    使用WampServer搭建本地PHP环境,绑定域名,配置伪静态
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4743519.html
Copyright © 2020-2023  润新知