与一位同事进行了一场激烈的辩论,讨论他在try/catch中包装他的大部分功能的做法,但是抓住它只是一个"抛出",例如
Private sub foo()
try
'Do something'
catch
throw 'And nothing else!'
End Try
End Sub
Run Code Online (Sandbox Code Playgroud)
我的想法是甚至不打扰(假设你此时不需要做任何事情) - 异常会冒泡到父成员中的下一个异常处理程序.
听起来似乎有道理的唯一论点是,有时异常没有被捕获并且您的代码停止了(在调试模式下),当前行以绿色突出显示...并且这可能与多个线程有关?最佳实践会声明"每个线程的异常处理程序",但大多数情况下我们使用单线程.
好处可能是它在调试模式下可能有用而不会突然弹出到父成员(是的,Joel!) - 你将转到"throw"语句并能够检查你的本地人.但是那么你的代码将"乱七八糟地尝试/捕获/抛出"(在这里引用另一个线程)?
如果没有异常发生,那么在任何地方添加try/catch/throws会涉及什么样的开销(即你应该避免在紧密循环中尝试/捕获)?
Jan*_*Jan 18
Microsoft建议您不要捕获异常,因为您唯一要做的就是立即重新抛出它(我现在不记得源代码).您的代码应该只捕获您要处理清除事务或类似操作的异常.
因此,捕获和重新抛出异常通常不是一个好习惯.
用另一个例外捕获和替换它的原因可能是
对于调试,您可能希望更改"异常时间中断:" - 处理程序(按Ctrl + Alt + e)在所选CLR异常上"抛出"的值.
您可能希望查看entlib异常处理程序块(EHB),使用该块可以建立关于如何处理代码中的异常的模式.
关于你的性能问题,我认为在你的代码中有许多try/catch块并不是一个问题,但是当你的代码引发并捕获许多异常时,你会得到性能命中.