Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试捕获时未处理的异常会影响性能_C#_Performance_Try Catch - Fatal编程技术网

C# 尝试捕获时未处理的异常会影响性能

C# 尝试捕获时未处理的异常会影响性能,c#,performance,try-catch,C#,Performance,Try Catch,我在一个C#桌面应用程序中工作 我编写了一些代码,在执行该代码时,它会落入catch块 try { //come code } catch(exception ex) { } //some code 2 我没有处理异常,因为我想在catch块之外执行代码 “一些代码2” 但在取消处理异常时,会降低执行性能 因此,请对此修改任何解决方案。您应该重新构造代码,以避免对控制流使用异常 例外情况应为例外情况保留。抛出和捕获异常会带来无法避免的性能开销。大部分开销来自捕获堆栈跟

我在一个C#桌面应用程序中工作
我编写了一些代码,在执行该代码时,它会落入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。如果捕获没有返回,那么异常的性能会影响什么样的桌面应用程序?您可以编写代码来避免异常吗?