用法异常块.net

时间:2009-06-11 00:53:32

标签: c# .net

我在一篇文章中读到,在代码中编写许多try catch异常块会增加性能开销。

这是真的吗?为什么声明许多异常块会影响性能?

由于 SCA

4 个答案:

答案 0 :(得分:5)

Try / catch块不会产生太多性能开销。

抛出异常确实会产生一些开销,但这不应成为问题 - 异常应该是例外。

本文详细介绍了如何实现try / catch块及其运行时成本:http://www.programmersheaven.com/user/pheaven/blog/175-Do-trycatch-blocks-hurt-runtime-performance/

答案 1 :(得分:2)

我认为以下引用很好地总结了异常

  

如果你担心异常表现,那你就错了

如果您将应用程序用作预期用途,则异常不会对您的应用程序产生重大性能影响。那是特殊情况。

关于异常性能,有很多不良信息。如果您可以发布您正在阅读的文章的链接,那将是很好的,这样我们就可以看到为什么他们认为这将是一个问题。它们可能涵盖了一个不适用于大多数情况的角落情况。

答案 2 :(得分:1)

(我为没有直接回答你的问题而道歉)

建议您尝试/捕获异常块,以便在您可能捕获但可能很少但是罕见,失败或异常行为的位置(如读取文件或查询数据库)。您可能还希望将try / catch块放在函数无法满足其合同的位置。

使用断言来捕获永远不会发生的错误或缺陷。还使用断言作为自我记录代码。 (参见Code Complete 2nd Edition中的防御性编程章节)。

答案 3 :(得分: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调试问题。