[英]Why should I put try/catch block out of loop?
以下是Practice&Patterns團隊的CodeReview指南。 http://msdn.microsoft.com/zh-cn/library/ms998574#scalenetchapt13_topic7 (該鏈接自動導航到“異常”部分。)
他們說當你處理異常時你應該把try / catch塊放在循環之外,我想知道為什么?
因為try... catch
塊的底層實現會增加生成代碼的開銷,並且將這些開銷置於緊密循環中並不是一個好主意,性能方面。
從技術上講,如果循環的所有迭代都是“相等”,並且一旦發生異常就應該停止循環,那么最好將try... catch
塊放在循環之外。 如果循環必須繼續,盡管發生異常,您將被迫將塊放在循環中,但在這種情況下您可能想要檢查您的設計。
異常是昂貴的 - 如果將異常邏輯放在循環中,則可能會在循環中的每次迭代中拋出異常。 這很容易導致性能問題。
如果將try / catch塊放在循環之外,則只需處理一個異常。
循環內的try/catch
與循環外的try/catch
行為不同,除非它總是重新拋出異常。
因此,您的選擇將取決於您的要求:如果您想繼續循環,則在循環內捕獲,否則在外部。
我認為推薦的原因是循環中的try/catch
看起來像是使用控制流的異常。 它標志着潛在的“代碼味道”,而不是陳述一個嚴格而快速的規則。
但如果這是你的要求,那么忽略這個建議是合理的。 舉一個簡單但過時的例子,在一個沒有Int32.TryParse
的世界中(.NET 1.x就在不久之前!),有一個循環使用Int32.Parse
將字符串列表解析為整數是Int32.Parse
在循環中的try / catch中。
由於循環中可能出現多個異常,導致應用程序中出現不必要的開銷。
如果在那里發現了錯誤,那么在循環外部處理會更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.