我听说建议,如果可能,应避免尝试使用catch块,因为它们很昂贵。

我的问题特别是关于.NET平台的:为什么try块昂贵?

回应摘要:

在这个问题上显然有两个阵营:那些说尝试块很昂贵的阵营,和那些说“也许一点点”的阵营。

那些说尝试块很昂贵的人通常会提到取消调用堆栈的“高成本”。就我个人而言,我不相信该参数-特别是在阅读了如何将异常处理程序存储在here之后。

乔恩·斯基特(Jon Skeet)坐在“也许只是一点点”阵营,并写了两篇关于异常和性能的文章,您可以在here上找到它们。

我发现有一篇文章非常有趣:它谈到了try块对“其他”性能的影响(不一定是内存或CPU消耗)。彼得·里奇(Peter Ritchie)提到,他发现try块中的代码并未得到优化,因为编译器会对其进行优化。您可以阅读有关他的发现here的信息。

最后,有一个博客条目介绍了在CLR中实现异常的那个人的问题。看一下克里斯·布鲁姆(Chris Brumme)的文章here

最佳答案

并不是块本身很昂贵,它甚至没有捕获到异常,就其本身而言,这很昂贵,是运行时取消调用堆栈,直到找到可以处理该异常的堆栈帧为止。抛出异常的重量很轻,但是如果运行时必须向上移动六个堆栈帧(即深度调用六个方法)以找到合适的异常处理程序,可能会执行finally块,那么您可能会看到很长时间。

关于.net - 为什么试块价格昂贵?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/164613/

10-13 08:16