C# 尝试捕获时未处理的异常会影响性能
我在一个C#桌面应用程序中工作C# 尝试捕获时未处理的异常会影响性能,c#,performance,try-catch,C#,Performance,Try Catch,我在一个C#桌面应用程序中工作 我编写了一些代码,在执行该代码时,它会落入catch块 try { //come code } catch(exception ex) { } //some code 2 我没有处理异常,因为我想在catch块之外执行代码 “一些代码2” 但在取消处理异常时,会降低执行性能 因此,请对此修改任何解决方案。您应该重新构造代码,以避免对控制流使用异常 例外情况应为例外情况保留。抛出和捕获异常会带来无法避免的性能开销。大部分开销来自捕获堆栈跟
我编写了一些代码,在执行该代码时,它会落入catch块
try
{
//come code
}
catch(exception ex)
{
}
//some code 2
我没有处理异常,因为我想在catch块之外执行代码“一些代码2” 但在取消处理异常时,会降低执行性能
因此,请对此修改任何解决方案。您应该重新构造代码,以避免对控制流使用异常 例外情况应为例外情况保留。抛出和捕获异常会带来无法避免的性能开销。大部分开销来自捕获堆栈跟踪、调用站点和其他要放入异常的信息 还要注意,调试模式显著增加了处理异常所需的时间。 (因此,如果你还没有在发布模式下尝试过,也许你应该先尝试一下——尽管这个答案第一行中的建议仍然适用)
另见MSDN;在前面的问题和答案中还可以找到一些很好的资源:。不要将异常用于正常的程序流。例外情况不会优化速度,因为它们通常用于性能不再重要的情况 创建异常时,它会收集大量信息,用于对错误进行故障排除,因此这需要一些时间。如果您在调试模式下编译了代码,它将收集更多的信息,这样做需要更多的时间
无论您正在做什么导致异常,请在导致实际错误之前尝试捕获该条件。例如,如果要捕获一个被零除的除法,则在进行除法之前,应检查要被除的值。引发和捕获异常确实会影响性能,但这不是代码的最大问题。接受这样的异常是一种坏做法,捕获
System.exception
s也不是一个好主意。一般来说,您应该只捕获您可以合理处理的异常,并允许其他任何事情冒泡。如果您想在<代码> > 块之后执行代码,不管是否发生异常,请考虑使用块。例如:
try
{
// some code
}
finally
{
// some code 2
}
或者,您可以重新组织代码,以避免使用try-catch
或try-finally
您可能希望为您的应用程序创建一个全局异常处理程序,很可能是使用事件、日志记录等。由于您有一个捕获,将执行一些代码2。如果捕获没有返回,那么异常的性能会影响什么样的桌面应用程序?您可以编写代码来避免异常吗?