日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于TryCatch捕獲錯(cuò)誤的簡單性能測試

一直以來都很好奇TryCatch捕獲一個(gè)錯(cuò)誤會(huì)對(duì)性能有多大的損耗,有的人說差異是倍數(shù)級(jí)的,有的人說差異不大,今天忽然心血來潮就自己寫了個(gè)Demo測試,因?yàn)樵?jīng)自己寫過一篇文章提到不要濫用TryCatch來捕獲已知的錯(cuò)誤,卻沒有用事例佐證過,當(dāng)然結(jié)果也是如預(yù)期一般。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比威遠(yuǎn)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式威遠(yuǎn)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋威遠(yuǎn)地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

 
 
 
 
  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("循環(huán)次數(shù)" + loopCount + "不用TryCatch耗時(shí):" + sw2.ElapsedMilliseconds);  
  38.             Console.WriteLine("循環(huán)次數(shù)" + loopCount + "這是TryCatch耗時(shí):" + sw.ElapsedMilliseconds);  
  39.  
  40.             Console.WriteLine("按回車鍵退出" );  
  41.             Console.ReadLine();  
  42.         } 

為了直觀地看到每一次轉(zhuǎn)換是否進(jìn)行了,所以在每一次轉(zhuǎn)換前都輸出一次是否用到TryCatch,當(dāng)loopCount為100時(shí)運(yùn)行結(jié)果如下:

而當(dāng)把loopCount的值加大為10000時(shí)輸出結(jié)果如下:

不同的運(yùn)行環(huán)境下的耗時(shí)結(jié)果不一樣,但是兩者之間的耗時(shí)差距是很大的

當(dāng)然了,這樣的測試有點(diǎn)片面,但從測試數(shù)據(jù)我們足以得到一種信息——不要把可預(yù)知的異常放到TryCatch里面讓系統(tǒng)捕獲處理

忽然想到,我這個(gè)測試時(shí)在轉(zhuǎn)換錯(cuò)誤時(shí)的測試,那么程序如果不捕獲到異常會(huì)怎么樣呢,把代碼改成如下

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

運(yùn)行1000次時(shí)結(jié)果如下(運(yùn)行環(huán)境不同會(huì)出現(xiàn)不同結(jié)果,我測試多次都是用TryParse比較耗時(shí),大約多100-300)

而在運(yùn)行10000次時(shí)結(jié)果如下:

為了驗(yàn)證是否因?yàn)門ryParse和Convert之間有差異,將程序改動(dòng)后運(yùn)行1000次結(jié)果如下:

10000次運(yùn)行結(jié)果如下:

多次運(yùn)行發(fā)現(xiàn)結(jié)果基本相差不大,偶爾會(huì)出現(xiàn)不用TryCatch會(huì)耗時(shí)長很多,這個(gè)留待大牛去解釋,但以上測試表明在不出現(xiàn)錯(cuò)誤的情況下二者的性能損耗差不多,但在出現(xiàn)錯(cuò)誤的情況下卻相距甚大。


新聞標(biāo)題:關(guān)于TryCatch捕獲錯(cuò)誤的簡單性能測試
網(wǎng)頁地址:http://www.dlmjj.cn/article/ccoepie.html