首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DivideByZeroException太慢

DivideByZeroException太慢
EN

Stack Overflow用户
提问于 2010-02-02 19:27:15
回答 6查看 334关注 0票数 7

这是非常慢的:

代码语言:javascript
复制
try
{
    x = k / y;
}
catch (DivideByZeroException) { }

这大约快了5倍:

代码语言:javascript
复制
if (y > 0) x = k / y;

有人能告诉我为什么吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-02 19:30:59

仅仅快了5倍?你确实让我很惊讶。这可能意味着您的样本数据中没有太多的零。

异常比简单的比较开销更大。如果使用得当(即在特殊情况下),它们不会显著影响性能-因为如果你抛出足够多的异常来产生巨大的影响,你的服务很可能已经被冲洗了。当你使用异常来试图忽略你可以很容易测试的条件时,它确实会产生问题-就像这个。

关于异常的成本,需要注意的一点是:在调试器中,它们的成本比在没有附加调试器的情况下运行时要高得多;特别是需要加载大量资源的第一个异常可能需要几秒钟的时间,而不是微微/毫秒。如果要对代码进行基准测试,重要的是不要在调试器中执行--这在一般情况下是正确的,但对于异常情况尤其如此。

票数 11
EN

Stack Overflow用户

发布于 2010-02-02 19:28:32

因为异常代价很高。

当抛出异常时,运行时需要提取相当多的信息(例如堆栈跟踪)并将它们冒泡起来。这需要时间和资源,相比之下,测试0值是非常便宜的。

有关更多信息,请参阅this SO question询问异常的代价。

票数 10
EN

Stack Overflow用户

发布于 2010-02-02 19:30:06

错误,因为异常比检查慢。异常通常有很多基础设施,这是简单的if语句没有的。

它们不是等价的操作,因为您在异常中传递了大量信息,即使您选择不像本例中那样使用它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2183607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档