zoukankan      html  css  js  c++  java
  • 编写高质量代码改善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个建议》陆敏技

  • 相关阅读:
    谷哥的小弟学后台(29)——动态代理
    HDU
    jni 入门 android的C编程之旅 --->环境搭建&&helloworld
    C# 开发系列(二)
    C# 开发系列(一)
    ajax跨域实现api 接口调用
    dependency injection(2)
    要读的书单
    dependency injection
    php dependency innjection
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4743519.html
Copyright © 2011-2022 走看看