try catch中未处理的异常会影响性能

时间:2013-09-22 15:48:32

标签: c# performance try-catch

我正在使用C#Desktop应用程序 我做了一些代码,以便在执行代码时它落入catch块

try
{

        //come code

}
catch(exception ex)
{

}
  //some code 2

我没有处理异常,因为我想在catch块之外执行代码 '部分代码2'

但是在处理异常时会降低执行的性能

所以请为此提供任何改变的解决方案

3 个答案:

答案 0 :(得分:4)

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

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

无论您正在做什么导致异常,请尝试在导致实际错误之前捕获该条件。例如,如果您将除法除以零,则应在进行除法之前检查要除的值。

答案 1 :(得分:1)

您应该重新构建代码,以避免使用控制流的异常。

例外情况应该保留给特殊事物。抛出和捕获异常会产生性能开销,这是无法避免的。大部分开销来自捕获堆栈跟踪,调用站点和其他信息以放入异常。

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

另请参阅MSDN上的Exceptions and Performance;在上一个问题和答案中也可以找到很好的资源:How expensive are exceptions in C#?

答案 2 :(得分:1)

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

try
{
    // some code
}
finally
{
    // some code 2
}

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

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