2009-09-23 61 views
1

我很想知道是否應該最小化try/catch塊內部的代碼,或者它確實無關緊要。在try,catch塊之外運行代碼有沒有任何性能優勢?

public bool ObjectExists(string stringTest, string againSomethingElse) 
    { 
     if(true) {} 
     else {} //Code here is better/worst/same 
     try 
     { 
      //Versus code inside try/catch block 

     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

回答

10

在.net中,如果實際拋出異常,try/catch只會產生開銷。因此,不要過於擔心try中的代碼的性能影響。只是不要將異常作爲流量控制的一種形式。

+0

+1 - 關於何時不拋出異常的最後一句話。 – 2009-09-23 01:36:48

3

我同意上面的內容,但是你不應該把你的整個代碼塊放在try catch中,讓它抓住formatexception或null引用。你應該爲這些編寫代碼並自己處理它們。

我不知道有多少次我看到:

try { 
Request.QueryString["id"].ToString(); 
} 

顯然,一個空引用如果id爲null,所以檢查它是否爲空,不要試圖/抓住它。

6

下面是解決此問題的正確方法。

首先編寫代碼,以便異常處理是正確的。始終保持正確。

然後設定合理的,以客戶爲中心的績效目標。然後測試你的程序。然後,如果你沒有達到你的目標,使用一個分析器來找到最慢的事情。如果一些奇怪的巧合最慢的事情碰巧是你正確的異常處理,那麼你應該考慮異常處理的性能成本。

+0

+1 - 早期優化=邪惡! – 2009-09-23 04:24:18

+0

+1 YUP ...埃裏克的再次掛在這裏的C#標記的問題:) – 2009-09-23 05:11:21

+2

好吧,*是啊*。 - – 2009-09-23 06:03:45