7

我希望得到真正使用 C# 进行实时编程或真正了解语言内部结构的人的回应。

我知道异常不应该用于处理正常处理,而只能用于检测错误情况。关于这个话题有很多讨论。

我想知道是否有任何运行时间减慢只是因为有一个 try/catch 块(除非程序无论如何都必须结束,否则它永远不会捕获异常)。try/catch 块位于必须重复调用的函数内。我怀疑只有最低的成本。

是否可以根据 CPU 周期或其他任务(与浮点乘法相同的成本)或其他方式来量化成本?

我们在 windows XP 下使用 Microsoft C#.Net 3.5。

4

2 回答 2

11

.NET 异常具有非常、非常低的开销成本,除非它们被抛出。有一个 try/catch 块对性能的影响非常小。即使在非常快速、紧密的循环中,我也几乎没有发现异常处理到位的影响。

但是,.NET 中的异常在抛出时非常昂贵。如果你抛出它们而不是许多其他语言,它们往往会对性能产生很大的影响。这是由于在创建异常等时收集了完整的堆栈信息。

这与一些其他语言(例如 python)相反,其中异常处理具有更高的成本,但抛出实际上是相当高性能的。

但是,如果您担心,我建议您分析您的例程,并自己进行测试。这是我经过相当多的性能分析后的经验。在您自己的代码库中进行测量是不可替代的。

于 2009-08-28T15:49:37.583 回答
1

用指标很好地讨论了 try catch 的性能影响。

当不抛出异常时,try/catch 块会损害性能吗?

于 2009-08-28T15:57:29.627 回答