我想要一个真正在C#中进行实时编程或者真正了解语言内部的人的回复。
我知道异常不应该用于处理正常处理,而只是用于检测错误情况。关于这个话题有很多讨论。
我想知道是否有任何运行时间减慢,只需要一个try / catch块(除非程序必须以任何方式结束,否则永远不会捕获异常)。 try / catch块位于必须重复调用的函数内。我怀疑只有最低成本。
可以根据CPU周期或其他任务(与浮点乘法相同的成本)或其他方式来量化成本吗?
我们在Windows XP下使用Microsoft C#.Net 3.5。
答案 0 :(得分:11)
除非抛出异常,否则.NET异常的开销成本非常低。使用try / catch块对性能影响非常小。我发现几乎没有任何影响,即使在非常快速,紧密的循环中,也有异常处理。
然而,.NET中的异常在被抛出时非常昂贵。如果抛出它们,它们往往会对性能产生很大的影响。这是由于创建异常时收集的完整堆栈信息等等。
这是与其他语言相反的行为,例如python,其中异常处理的成本较高,但抛出实际上是相当高效的。
但是,如果您担心,我会建议您描述您的日常工作,并自行测试。经过相当多的性能分析后,这是我的经验。在您自己的代码库中无法替代测量。
答案 1 :(得分:1)
有关try catch的性能影响的指标的良好讨论。
Do try/catch blocks hurt performance when exceptions are not thrown?