这是非常慢的:
try
{
x = k / y;
}
catch (DivideByZeroException) { }这大约快了5倍:
if (y > 0) x = k / y;有人能告诉我为什么吗?
发布于 2010-02-02 19:30:59
仅仅快了5倍?你确实让我很惊讶。这可能意味着您的样本数据中没有太多的零。
异常比简单的比较开销更大。如果使用得当(即在特殊情况下),它们不会显著影响性能-因为如果你抛出足够多的异常来产生巨大的影响,你的服务很可能已经被冲洗了。当你使用异常来试图忽略你可以很容易测试的条件时,它确实会产生问题-就像这个。
关于异常的成本,需要注意的一点是:在调试器中,它们的成本比在没有附加调试器的情况下运行时要高得多;特别是需要加载大量资源的第一个异常可能需要几秒钟的时间,而不是微微/毫秒。如果要对代码进行基准测试,重要的是不要在调试器中执行--这在一般情况下是正确的,但对于异常情况尤其如此。
发布于 2010-02-02 19:28:32
因为异常代价很高。
当抛出异常时,运行时需要提取相当多的信息(例如堆栈跟踪)并将它们冒泡起来。这需要时间和资源,相比之下,测试0值是非常便宜的。
有关更多信息,请参阅this SO question询问异常的代价。
发布于 2010-02-02 19:30:06
错误,因为异常比检查慢。异常通常有很多基础设施,这是简单的if语句没有的。
它们不是等价的操作,因为您在异常中传递了大量信息,即使您选择不像本例中那样使用它。
https://stackoverflow.com/questions/2183607
复制相似问题