更具体的异常处理是否会提高性能?
Does more specific exception handling improve performance?
如果我能捕捉到更具体的异常,我是否能阻止 clr 做额外的工作并提高性能?因此,如果我知道我可能会遇到套接字异常,但不关心以与其他异常不同的方式处理它,是否仍然有更具体的捕获更好?我正在研究 MicroFramework,因此性能和资源方面的小改进值得询问。
catch (System.Net.Sockets.SocketException netEx)
{
}
catch (Exception ex)
{
}
在性能方面我不会考虑这个。
从代码正确性的角度来看:您应该几乎总是 catch
最具体的异常。
当您捕获 Exception
时,您的异常处理程序将吞下 任何 异常,即使您不准备处理它。想象一下 ArgumentNullException
被抛出。 catch 块会吞下它并引起混乱。
如果您准备处理的只是 SocketException
那么就抓住它。如果它的性能较低,那就这样吧。代码正确性不是为了如此微小的性能提升而牺牲的东西*
* 或根本没有性能提升 - 我 几乎 肯定存在 零 执行时间性能影响。我在我的电脑上做了一个基准测试,性能差不多。这不是一个全面的测试,但足以证实我的直觉。您可以使用类似于 this one
的技术 运行 自己的基准测试
如果我能捕捉到更具体的异常,我是否能阻止 clr 做额外的工作并提高性能?因此,如果我知道我可能会遇到套接字异常,但不关心以与其他异常不同的方式处理它,是否仍然有更具体的捕获更好?我正在研究 MicroFramework,因此性能和资源方面的小改进值得询问。
catch (System.Net.Sockets.SocketException netEx)
{
}
catch (Exception ex)
{
}
在性能方面我不会考虑这个。
从代码正确性的角度来看:您应该几乎总是 catch
最具体的异常。
当您捕获 Exception
时,您的异常处理程序将吞下 任何 异常,即使您不准备处理它。想象一下 ArgumentNullException
被抛出。 catch 块会吞下它并引起混乱。
如果您准备处理的只是 SocketException
那么就抓住它。如果它的性能较低,那就这样吧。代码正确性不是为了如此微小的性能提升而牺牲的东西*
* 或根本没有性能提升 - 我 几乎 肯定存在 零 执行时间性能影响。我在我的电脑上做了一个基准测试,性能差不多。这不是一个全面的测试,但足以证实我的直觉。您可以使用类似于 this one
的技术 运行 自己的基准测试