2
A
回答
1
嗯,因爲它有所作爲。做任何事都需要時間。
拋出一個異常會創建一個對象,獲取堆棧的副本,將堆棧放置兩次,也可能跨域進行編組。做東西需要時間。在一個理想的世界中,它也將是沒有被預測爲被採用的分支(因爲它應該是不太可能的分支),儘管我不知道這是否是這種情況。由於控制權已移到「遙遠」的某個地方,因此這也很可能導致緩存被重新填充的情況。
儘管如此,異常並不是特別慢,除非在調試器中運行(因爲顯而易見的原因,當拋出異常時會再次運行)。在測試和嘗試或者嘗試和報告更有意義的循環中進行try-and-catch是非常慢的,但這些都屬於微觀優化的範疇(「微優化「通常用作誹謗,但是當語義上更清晰的方法也稍微表現更好時,爲了清晰起見,這是一件好事 - 當我們爲了幾個循環而使事情變得不那麼清晰和語義上合理時, 「微優化」成爲負面)。
0
影響異常拋出的代價的一件事是一個包含調用堆棧信息的相當豐富的Exception對象。這需要花費一些時間和內存空間來爲我們構建和保存這些簡潔的信息。例如,非託管C++沒有這樣的信息調用堆棧,因此在C++更復雜的任務中進行調試。
0
「如果您遇到異常會嚴重影響您的性能的問題,那麼您在使用異常情況方面存在問題,而不僅僅是性能問題。」 - Jon Skeet
換句話說,如果您將它們用於他們的意圖,那是特殊情況而不是常規控制流,拋出異常的性能懲罰不應該成爲問題。
相關問題
- 1. NSXMLParser表現異常
- 2. 異步.NET異常
- 3. GoogleWebAuthorizationBroker未發現.NET Core異常
- 4. .NET WCF異常
- 5. .NET OutOfMemory異常
- 6. 在.NET異常
- 7. .NET核心Web App不上異常突破,並在異常
- 8. 異常表現(數組:0x7f7298c057f0)
- 9. 輸入表現異常?
- 10. arm64 objectForKey表現異常?
- 11. .net安全異常
- 12. .NET異常太多
- 13. .NET TransactionScope的異常
- 14. .NET異常從表中查找處理
- 15. 的.Net 3.5圖表控件的異常
- 16. 在.net應用程序中使用異步時出現異常
- 17. 併發查詢時出現SQLAlchemy異常
- 18. 併發異常
- 19. Active Directory異常asp .net
- 20. .NET多線程和異常
- 21. 正確使用.NET異常
- 22. .NET異常窗口API
- 23. .NET異常的GeoIP服務
- 24. 用法異常塊.net
- 25. .NET MVC控制器異常
- 26. 捕捉SOAP異常.NET
- 27. .NET WebService的超時異常
- 28. 異常在.net中冒泡
- 29. .net序列異常錯誤
- 30. Mysql .NET 3.5的TypeLoad異常
檢查此問題:http://stackoverflow.com/questions/161942/how-slow-are-net-exceptions –