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

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

创新互联-专业网站定制、快速模板网站建设、高性价比威远网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式威远网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖威远地区。费用合理售后完善,十载实体公司更值得信赖。

 
 
 
 
  1. static void Main(string[] args)  
  2.         {  
  3.             int loopCount=100;  
  4.             List strList = new List();  
  5.  
  6.             for (int i = 0; i < loopCount; i++) {  
  7.                 strList.Add("str" + i);  
  8.             }  
  9.             int intTemp = 0;  
  10.  
  11.             Stopwatch sw2 = new Stopwatch();  
  12.             sw2.Start();  
  13.             foreach (string str in strList)  
  14.             {  
  15.                 Console.WriteLine("不用TryCatch");  
  16.                 int.TryParse(str, out intTemp);  
  17.             }  
  18.             sw2.Stop();  
  19.           
  20.  
  21.             Stopwatch sw = new Stopwatch();  
  22.             sw.Start();  
  23.             foreach (string str in strList)  
  24.             {  
  25.                 try 
  26.                 {  
  27.                     Console.WriteLine("这是TryCatch");  
  28.                     intTemp = Convert.ToInt32(str);  
  29.                      
  30.                 }  
  31.                 catch (Exception ex)  
  32.                 {  
  33.                     //异常不做处理  
  34.                 }  
  35.             }  
  36.             sw.Stop();  
  37.             Console.WriteLine("循环次数" + loopCount + "不用TryCatch耗时:" + sw2.ElapsedMilliseconds);  
  38.             Console.WriteLine("循环次数" + loopCount + "这是TryCatch耗时:" + sw.ElapsedMilliseconds);  
  39.  
  40.             Console.WriteLine("按回车键退出" );  
  41.             Console.ReadLine();  
  42.         } 

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

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

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

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

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

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

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

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

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

10000次运行结果如下:

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

名称栏目:关于TryCatch捕获错误的简单性能测试
转载来于:http://www.mswzjz.cn/qtweb/news30/405730.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能