zoukankan      html  css  js  c++  java
  • 『性能VS稳定』.Net 的 trycatch 到底浪费多少效率

    转载请标明:舒小龙 http://www.cnblogs.com/shuxiaolong/archive/2013/04/10/3012439.html

     

    起因:

    很多项目基本都不加 try-catch,问为什么,答曰  性能;  

    但是,无论是否细节,只要出错,导致的却是 异常(程序 或 网站黄页),开发人员疲于跟进这些细节BUG;

    于是想 知道,try-catch  到底浪费多少效率;

     

    代码:

     1                 DateTime time1 = DateTime.Now;
     2                 for (int i = 0; i < 10000000; i++)
     3          {
     4                     try{ int temp = Convert.ToInt32("1234567890"); }
     5                     catch (Exception exp) { }
     6          }
     7                 DateTime time2 = DateTime.Now;
     8                 for (int i = 0; i < 10000000; i++)
     9          {
    10                     int temp = Convert.ToInt32("1234567890");
    11          }
    12                 DateTime time3 = DateTime.Now;
    13 
    14                 Console.WriteLine("时间差(ms):\t有try\t{0}", ((time2 - time1).TotalMilliseconds));
    15                 Console.WriteLine("时间差(ms):\t无try\t{0}", ((time3 - time2).TotalMilliseconds));
    16                 Console.WriteLine();

     

    结果:(运行10遍)

    注意:第7,第10次:有 try-catch 的居然超过 没有 try-catch  的。

    一千万次 try-catch 执行,也只需要 1.6秒,损失基本不记。

     

    如果错误:

     1                 DateTime time1 = DateTime.Now;
     2                 for (int i = 0; i < 10000000; i++)
     3          {
     4                     try{ int temp = Convert.ToInt32("ABC"); }
     5                     catch (Exception exp) { }
     6          }
     7                 DateTime time2 = DateTime.Now;
     8                 Console.WriteLine("时间差(ms):\t有try\t{0}", ((time2 - time1).TotalMilliseconds));

    catch  性能瞬间损失  200 倍;

     

    结论:

    try  并不浪费效率,真正浪费效率的是 catch;

    catch 你会浪费效率,不 catch 直接崩溃;

    现在将问题改成     “错误时浪费效率  和  错误时程序崩溃  你选择哪样?”

     

     

    案例:

    前公司,一个网站 6台服务器,每天 40W人访问;

    开发部代码要求:自己的模块不影响别人的模块,所以  为了规避意外;代码中常见:一个函数 从开始就 try  ,函数结尾  catch 写异常日志 (try-catch  就像是函数体的一部分);

    结果:网站稳定,性能很快。

     

     

    自己的感想:

    真正的性能  并不是  你不用 try-catch;不用 LinQ;不用 EF;

    真正参与过 项目,特别是  交付他人的项目(不包括 产品,主营网站) 效率不高,往往是:

         错误的算法(比如内存分页);

         后期的治标不治本的狗皮膏药(眼看就要交付了,BUG只要让他不报错就行);

         架构中 执行了可以不执行的代码;

    真正的稳定  也不一定是  随时随地的 try-catch;

         认真写好每一个函数的代码,(不确信可能导致异常时 可以加 try-catch) 或者 (即使出现异常 也没有关系) 或者 (完全肯定不会出现异常的 代码);

         对其他方法的调用 的 返回值 采取 不信任态度——不要认为 其他方法 就一定能返回你需要的值;

         所有的网络通讯,分布式  必须加 try-catch;

     

     

  • 相关阅读:
    转载--gulp入门
    grunt之easy demo
    CentOS下vm虚拟机桥接联网
    Webstorm & PhpStorm
    2.使用Package Control组件安装
    virtual方法和abstract方法
    sql server 2008 跨服务器查询
    .NET开源项目常用记录
    vs2010 安装MVC 3.0
    所有运行命令指令大全
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/20130410_001.html
Copyright © 2011-2022 走看看