我正在一个 C# 桌面应用程序中工作,
我编写了一些代码,以便在执行该代码时它落入 catch 块
try
{
//come code
}
catch(exception ex)
{
}
//some code 2
我没有处理异常的地方,因为我想在catch块
'some code 2'之外执行代码
但是在处理异常时,它会降低执行性能
所以请为此提供任何更改解决方案
我正在一个 C# 桌面应用程序中工作,
我编写了一些代码,以便在执行该代码时它落入 catch 块
try
{
//come code
}
catch(exception ex)
{
}
//some code 2
我没有处理异常的地方,因为我想在catch块
'some code 2'之外执行代码
但是在处理异常时,它会降低执行性能
所以请为此提供任何更改解决方案
不要对正常的程序流程使用异常。异常没有针对速度进行优化,因为它们通常用于性能不再重要的情况。
创建异常时,它会收集大量可用于解决错误的信息,因此需要一些时间。如果您在调试模式下编译了代码,它将收集更多信息,从而花费更多时间。
无论您在做什么会导致异常,请尝试在该条件导致实际错误之前捕获该条件。例如,如果您要除以零,则应在进行除法之前检查要除以的值。
您应该重组您的代码以避免对控制流使用异常。
例外应该为例外的事情保留。抛出和捕获异常会产生性能开销,这是无法避免的。大部分开销来自捕获堆栈跟踪、调用站点和其他信息以放入异常。
另请注意,调试模式显着增加了处理异常的时间。(因此,如果您尚未在发布模式下尝试过,也许您应该先尝试一下 - 尽管此答案第一行中的建议仍然适用)。
另请参阅MSDN 上的异常和性能;在之前的问答中也可以找到很好的资源:C# 中的异常有多昂贵?.
抛出和捕获异常确实会对性能产生影响,但这不是代码的最大问题。吞下这样的异常是不好的做法,而且 catch 也不是一个好主意System.Exception
。一般来说,您应该只捕获您可以合理处理的异常并允许其他任何事情冒泡。如果你想在你的try
块之后执行代码,无论是否发生异常,都可以考虑使用finally
块。例如:
try
{
// some code
}
finally
{
// some code 2
}
或者,您可以重新组织代码以避免使用 atry-catch
或try-finally
根本不使用。
您可能希望为您的应用程序创建一个全局异常处理程序,最有可能使用AppDomain.UnhandledException
事件、日志记录等。