这非常慢:

try
{
    x = k / y;
}
catch (DivideByZeroException) { }

这大约快了5倍:
if (y > 0) x = k / y;

有人可以告诉我为什么吗?

最佳答案

仅快5倍?你确实让我感到惊讶。大概这意味着样本数据中没有太多零。

异常比简单的比较昂贵。如果正确使用(即在特殊情况下),它们不会显着影响性能-因为如果您抛出足够多的异常对其产生重大影响,则很可能您的服务已经崩溃。当您使用异常来尝试忽略条件时,这确实会引起问题,您可以很容易地对其进行测试(例如这种情况)。

关于异常的代价,需要注意的一件事是:与没有连接调试器的情况相比,它们在调试器中的成本要高得多。特别是第一个需要加载大量资源的异常可能需要几秒钟而不是几毫秒。如果要对基准代码进行基准测试,那么不要在调试器中执行代码至关重要-一般而言,这是正确的,但对于异常(exception)情况尤其如此。

关于c# - DivideByZeroException太慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2183607/

10-13 05:32