-1

我正在一个 C# 桌面应用程序中工作,
我编写了一些代码,以便在执行该代码时它落入 catch 块

try
{

        //come code

}
catch(exception ex)
{

}
  //some code 2

我没有处理异常的地方,因为我想在catch块
'some code 2'之外执行代码

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

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

4

3 回答 3

4

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

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

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

于 2013-09-22T15:58:26.257 回答
1

您应该重组您的代码以避免对控制流使用异常。

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

另请注意,调试模式显着增加了处理异常的时间。(因此,如果您尚未在发布模式下尝试过,也许您应该先尝试一下 - 尽管此答案第一行中的建议仍然适用)。

另请参阅MSDN 上的异常和性能;在之前的问答中也可以找到很好的资源:C# 中的异常有多昂贵?.

于 2013-09-22T15:52:12.520 回答
1

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

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

或者,您可以重新组织代码以避免使用 atry-catchtry-finally根本不使用。

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

于 2013-09-22T16:01:06.207 回答