try catch语句会影响性能吗?

9

try/catch 如果在 try 块中没有抛出异常,不会影响性能。
try/catch/finally 的情况如何呢?


@HPT 这是什么样的问题???为了处理各种异常,每个方法都必须使用try/catch。当软件产品不能优雅地失败或从错误中恢复时,它有什么用处??基本自身薄弱,性能又有什么关系。 - A_Var
可能是重复的问题,与https://dev59.com/tkrSa4cB1Zd3GeqPWGzf相似。 - Simon Mourier
1
如果我能得到每一个“X会影响性能吗”或“X比Y快吗”的问题一分钱的话……真的,你们这些人需要一个兴趣爱好。或者是一个介绍,告诉你在哪里可以寻找优化的机会,在哪里不行(以及何时你甚至都不应该尝试)。 - user395760
@delnan - 你会成为一个富人!! 但是你的银行不会喜欢你因为你要把所有的便士都送给他们。 - Andrew Barber
3
“try/catch对于每个方法来说都是必须的”这个说法,我非常不同意。捕获异常没有意义,除非你确实打算以某种方式“处理”它。并非每个方法都需要这样做。公开可能会引发异常的方法没有问题,只需记录下它们可能抛出的异常和原因即可。 - David
4个回答

14

4

try/catch只有在抛出异常时才会影响性能(但这并不是因为try/catch,而是因为异常被创建了)。

try/catch/finallytry/catch相比没有额外的开销。


2
创建异常确实会带来一些性能成本。通常,只有在代码中确实需要处理异常时才捕获异常。
请注意,为了在可能出现故障后关闭资源或执行其他必要任务,您可以简单地使用try/finally块。finally仍将按预期执行,您只是没有在过程中捕获异常。相反,您让它冒泡到需要去的任何地方。

你的答案没有任何错误,但我想指出一个小细节;无论你是否捕获异常,都不会对性能产生实际影响(除非应用程序在任何地方都没有处理而崩溃)。我之所以提到这个细节,是因为原帖似乎有点关注是否捕获异常会产生某些影响。正如你所指出的,是创建异常是“重”的,而不是处理/不处理异常。 - Andrew Barber
@Andrew Barber:没错,你说得对。你的回答肯定比我的措辞更好。我只是更关注不想在不必要的情况下捕获异常的观点,这可能与原始问题无关。我见过很多代码,仅仅为了再次抛出异常而捕获异常,甚至实例化一个新的(自定义)异常并将捕获的异常添加到其中。 - David
我曾经看到过这样的代码,它在一个相当紧密的循环内做了后者的操作,而这个循环会迭代几百次,同时阻塞UI,在这些迭代中至少有10%的情况会导致异常。真是有趣的时刻! - Andrew Barber

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接