• 关于TryCatch捕获错误的简单性能测试


    一直以来都很好奇TryCatch捕获一个错误会对性能有多大的损耗,有的人说差异是倍数级的,有的人说差异不大,今天忽然心血来潮就自己写了个Demo测试,因为曾经自己写过一篇文章提到不要滥用TryCatch来捕获已知的错误,却没有用事例佐证过,当然结果也是如预期一般

     static void Main(string[] args)
            {
                int loopCount=100;
                List<string> strList = new List<string>();
    
                for (int i = 0; i < loopCount; i++) {
                    strList.Add("str" + i);
                }
                int intTemp = 0;
    
                Stopwatch sw2 = new Stopwatch();
                sw2.Start();
                foreach (string str in strList)
                {
                    Console.WriteLine("不用TryCatch");
                    int.TryParse(str, out intTemp);
                }
                sw2.Stop();
            
    
                Stopwatch sw = new Stopwatch();
                sw.Start();
                foreach (string str in strList)
                {
                    try
                    {
                        Console.WriteLine("这是TryCatch");
                        intTemp = Convert.ToInt32(str);
                       
                    }
                    catch (Exception ex)
                    {
                        //异常不做处理
                    }
                }
                sw.Stop();
                Console.WriteLine("循环次数" + loopCount + "不用TryCatch耗时:" + sw2.ElapsedMilliseconds);
                Console.WriteLine("循环次数" + loopCount + "这是TryCatch耗时:" + sw.ElapsedMilliseconds);
    
                Console.WriteLine("按回车键退出" );
                Console.ReadLine();
            }

    为了直观地看到每一次转换是否进行了,所以在每一次转换前都输出一次是否用到TryCatch,当loopCount为100时运行结果如下:

    而当把loopCount的值加大为10000时输出结果如下:

    不同的运行环境下的耗时结果不一样,但是两者之间的耗时差距是很大的

    当然了,这样的测试有点片面,但从测试数据我们足以得到一种信息——不要把可预知的异常放到TryCatch里面让系统捕获处理

    忽然想到,我这个测试时在转换错误时的测试,那么程序如果不捕获到异常会怎么样呢,把代码改成如下

      for (int i = 0; i < loopCount; i++) {
                    strList.Add( i.ToString());
                }

    运行1000次时结果如下(运行环境不同会出现不同结果,我测试多次都是用TryParse比较耗时,大约多100-300)

    而在运行10000次时结果如下:

    为了验证是否因为TryParse和Convert之间有差异,将程序改动后运行1000次结果如下:

    10000次运行结果如下:

    多次运行发现结果基本相差不大,偶尔会出现不用TryCatch会耗时长很多,这个留待大牛去解释,但以上测试表明在不出现错误的情况下二者的性能损耗差不多,但在出现错误的情况下却相距甚大

  • 相关阅读:
    今天上传公司服务器出现的.net framework版本错误问题
    浮动后父容器高度自适应
    asp net 编程问题 实现下一篇 和上一篇效果
    注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
    SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)
    域名状态,域名查询看是否被注册
    关于403 由于扩展配置问题而无法提供您请求的页面的问题
    让qq图标在自己的网站上显示方法
    Tomcat基于虚拟路径的发布和web.xml配置
    Tomcat虚拟目录配置方法及原理
  • 原文地址:https://www.cnblogs.com/jasonlwings/p/2956649.html
Copyright © 2020-2023  润新知