异常处理.捕获多长时间?

Dan*_*kin 5 c# exception-handling exception

可能重复:
.NET异常有多慢?

是否存在抛出异常并立即捕获的开销?这有什么区别

void DoSomething(object basic)
{
    try
    {
       if (basic == null)
         throw new NullReferenceException("Any message");
       else
       {
         //...
       }
    }
    catch (Exception error)
    {
       _logger.WriteLog(error);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个(这里我们不抛出异常):

void DoSomething(object basic)
{
    try
    {
        if (basic == null)
        {
            _logger.WriteLog(new NullReferenceException("Any message");
            return;
        }
        else
        {
         ...
        }
    }
    catch (Exception error)
    {
        _logger.WriteLog(error);
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个片段会更快吗?

此外,我想知道为什么一个解决方案比另一个更快.

Sam*_*eff 5

异常比所有其他程序流都慢,但不是出于性能原因应该避免的程度。但是,它们并不打算用于程序流程。在您的情况下,您有一个非常有效的替代方案,它比使用异常更好。当您可以预测情况并无例外地适当处理时,请始终这样做。另外,为了方便,不要在正常程序流中使用异常。

当您遇到无法直接处理的意外异常情况时,请使用异常。