簡體   English   中英

為什么我要把try / catch塊放在循環之外?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM