2009-06-11 39 views
0

我已經閱讀過一篇文章,它寫了很多嘗試在代碼中捕獲異常塊會增加性能開銷。用法異常塊.net

這是真的嗎?它爲什麼會聲明很多異常塊影響性能?

感謝 SCA

+0

這是什麼文章? – itsmatt 2009-06-11 00:58:04

+0

檢查這一個出http://stackoverflow.com/questions/307610/how-do-exceptions-work-behind-the-scenes-in-c – bobobobo 2009-06-11 02:16:02

回答

2

我認爲以下報價總結了異常精美

如果你擔心關於您使用它們的異常性能錯誤

如果您將它們用作打算使用的例外,它們將不會對應用程序產生顯着的性能影響。這是出於特殊情況。

有很多關於異常性能的不良信息。如果你可以發佈你正在閱讀的文章的鏈接,這將是非常好的,所以我們可以看到他們爲什麼認爲這會是一個問題。這可能是他們涵蓋了一個不適用於大多數情況的角落案例。

0

下面是從TheDailyWTF創作者有關的異常開銷的好文章:

http://weblogs.asp.net/alex_papadimoulis/archive/2005/03/29/396141.aspx

從文章中拋出1000個例外採取一個簡單的例子:

Console.WriteLine(Now().ToString("hh:mm:ss.fffffff")) 
DoNothingImportant() 
ThrowRecursiveExceptions(1000) 
Console.WriteLine(Now().ToString("hh:mm:ss.fffffff")) 

Output: 
10:57:38.0252702 
10:58:39.9205680 

你可以看到它大約需要2分鐘,但因爲它們只能用於特殊行爲,我不會擔心。此外,當你可以立即修復它時,通過使用捕獲和日誌記錄發現的真正「異常」異常對你來說將是無限的價值,而不是在靜默地嘗試失敗時嘗試ghost調試問題。

1

(我不直接回答你的問題深表歉意)

的try/catch異常塊,建議在你想可能趕上的地方,但少見,發生故障或異常行爲,比如讀取文件或查詢數據庫。您可能還想將try/catch塊放在函數無法履行合約的地方。

使用斷言來捕獲永遠不會發生的錯誤或缺陷。也使用斷言作爲自我記錄代碼。 (見Code Complete 2nd Edition中的防禦性編程章節)。