Да, есть разница.Оптимизаторы джиттера x86 и x64 никогда не встроат метод с оператором throw .Трудно дать количественную оценку разницы, потому что возможна дополнительная оптимизация после того, как она встроена, но обычно это пара наносекунд на вызов.
Стратегия оптимизации, обычно используемая в коде платформы .NET, состоит в том, чтобы поместить операторы, которые бросаютисключение в вспомогательном методе, так что общий путь к коду все еще встроен.Видимый в методе Math.Abs (), например:
public static int Abs(int value)
{
if (value >= 0) return value;
return AbsHelper(value);
}
private static int AbsHelper(int value)
{
if (value == int.MaxValue) throw new OverflowException(...);
return -value;
}
, который гарантирует, что сам метод Abs () встроен, и только отрицательные значения принимают неоптимальный путь кода.