关于c#:try catch中的未处理异常会影响性能

unhandled exception at try catch affect performance

我正在使用C桌面应用程序
我编写了一些这样的代码,在执行该代码时,它会落入catch块中。

1
2
3
4
5
6
7
8
9
10
11
try
{

        //come code

}
catch(exception ex)
{

}
  //some code 2

我还没有处理异常,因为我想在catch块外执行代码"一些代码2"

但在取消处理异常时,会降低执行性能

所以请给这个换个方案


不要对正常程序流使用异常。对于速度,例外情况没有进行优化,因为它们通常用于性能不再重要的情况。

创建异常时,它会收集大量信息,可用于排除错误,因此这需要一些时间。如果您已经在调试模式下编译了代码,它将收集更多的信息,这样做需要花费更多的时间。

无论您所做的是什么都会导致异常,请尝试在导致实际错误之前捕获该条件。例如,如果捕捉到一个被零除的除法,在进行除法之前应该检查被除的值。


抛出和捕获异常确实会影响性能,但这不是代码的最大问题。吞下这样的例外情况是不好的做法,也不是一个好主意来抓住System.Exceptions。一般来说,你只应该抓住你可以合理处理的例外情况,并允许任何其他事情冒泡。如果要在try块之后执行代码,无论是否发生异常,请考虑使用finally块。例如:

1
2
3
4
5
6
7
8
try
{
    // some code
}
finally
{
    // some code 2
}

或者您可以重新组织代码以避免使用try-catchtry-finally

您可能希望为您的应用程序创建一个全局异常处理程序,最有可能使用AppDomain.UnhandledException事件进行日志记录等。


您应该重新构造代码以避免对控制流使用异常。

例外情况应保留在例外情况下。抛出和捕获异常时会有一个性能开销,这是无法避免的。大部分开销来自捕获堆栈跟踪、调用站点和其他要放入异常的信息。

另外要注意,调试模式显著增加了处理异常所需的时间。(所以如果你还没有在发布模式下尝试过,也许你应该先尝试一下——尽管这个答案第一行的建议仍然适用)。

另请参见msdn上的异常和性能;在前面的问题和答案中还可以找到很好的资源:C中的异常有多昂贵?.