Влияние на производительность возвращаемых значений, которые редко используютсяC#

Место общения программистов C#
Ответить
Anonymous
 Влияние на производительность возвращаемых значений, которые редко используются

Сообщение Anonymous »

Влияет ли на производительность возврат редко используемых значений?
Например, рассмотрим следующий оператор защиты:

Код: Выделить всё

public static T NotNull(
[NotNull] T? value,
string? message = null,
ExceptionType exceptionType = ExceptionType.ArgumentOutOfRange,
[CallerArgumentExpression(nameof(value))] string? paramName = default
)
{
if (value is not null)
{
return value;
}

string innerMessage = $"Value cannot be null. {message}".TrimEnd();

if (exceptionType == ExceptionType.ArgumentOutOfRange)
{
throw new ArgumentOutOfRangeException(paramName, value, innerMessage);
}
else if (exceptionType == ExceptionType.InvalidValueException)
{
throw new UnexpectedNullException(paramName, value, innerMessage);
}

throw new NotImplementedException($"Exception type not implemented {exceptionType}");
}
Который используется, скажем, в 90 % случаев, а возвращаемое значение игнорируется:

Код: Выделить всё

public async Task DoSomething(SomeObject obj)
{
Guard.NotNull(obj, "Additional error details");

... do something...
}
Но иногда используется с возвращаемым значением, что в некоторых случаях повышает читабельность:

Код: Выделить всё

public class SomeObject(SomeOtherObject someValue)
{
public SomeOtherObject SomeValue { get; } = Guard.NotNull(someValue, "Additional error details")
}
Очевидно, что это микрооптимизация.
Однако обходной путь будет простым (иметь две разные функции (

Код: Выделить всё

NotNull(...)
и NotNullWithReturn(...), и лучше реализовать сейчас, чем позже (когда придется обновлять тысячи строк кода).
Я не знаю Я не особо доверяю тестам, которые я бы проводил лично, поскольку предполагаю, что компилятор или другие оптимизации могут повлиять на результаты непонятным мне образом (я не очень знаком с этой темой).
Если это актуально, используется .NET 9.

Подробнее здесь: https://stackoverflow.com/questions/791 ... arely-used
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»