新聞中心
一直以來都很好奇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í)體公司更值得信賴。
- static void Main(string[] args)
- {
- int loopCount=100;
- List
strList = new List (); - 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("循環(huán)次數(shù)" + loopCount + "不用TryCatch耗時(shí):" + sw2.ElapsedMilliseconds);
- Console.WriteLine("循環(huán)次數(shù)" + loopCount + "這是TryCatch耗時(shí):" + sw.ElapsedMilliseconds);
- Console.WriteLine("按回車鍵退出" );
- Console.ReadLine();
- }
為了直觀地看到每一次轉(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ì)怎么樣呢,把代碼改成如下
- for (int i = 0; i < loopCount; i++) {
- strList.Add( i.ToString());
- }
運(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


咨詢
建站咨詢
