.NET异常:优化异常情况



假设我有一个库,它使用异常来指示成功或失败。

当我尝试请求此库的不同属性时,我预计会多次抛出异常

现在在.NET中,据说trying不需要任何成本,但catching需要。(例外情况下的例外处理费用)。

有没有办法告诉.NET在安装处理程序时投入成本?像C++中那样?

澄清:调用代码"迭代"所有可能的函数参数值:

foreach( var enumvalue in Enum.GetValues( MyEnum ) ) {
   try {
      libraryObject.libFunction( enumvalue ); // will probably throw...
   } catch(ArgumentException) {
   }
}

注意:我知道这不是一个很好的API。应该对它进行扩展,以便对"可能"值进行迭代,或者使用返回代码。我不需要重述这一点的答案。

我认为在.net中没有办法让异常变得便宜。它们建立在结构化异常处理的基础上,这很昂贵。除了重写.net运行时,我想不出什么能让异常处理变得便宜。可能它在64位系统上更快一点,因为SEH在那里的工作方式不同。

正确的解决方案是重构抛出异常的API,使其不经常抛出。例如,通过返回状态代码。如果它们是你不能更改的第三方代码,那么我不知道如何提高你的性能。

或者,您可以编写类似于抛出异常的代码,该异常预先检测到错误条件。所以,如果你知道API会抛出,就不要再调用它了。虽然这违反了DRY,但对于第三方代码,这可能仍然是唯一可行的解决方案。

最新更新