Когда вы пишете приложение C#, оно компилируется в промежуточный язык, а затем во время выполнения дополнительно компилируется в код процессора. Обе эти ситуации позволяют оптимизировать инструкции программы.
В приведенных вами примерах все они в основном составлены по тем же инструкциям, что и предоставляемая оптимизация, используемая для вашей выгоды.
Учитывая
public int Method1()
{
return 1 + 1;
}
public int Method2()
{
int x = 1 + 1;
return x;
}
public int Method3()
{
var x = 1 + 1;
return x;
}
int getInt()
{
return 1 + 1;
}
public int Method4()
{
return getInt();
}
Ваш код, вероятно, будет преобразован в следующие инструкции
C.Method1()
L0000: mov eax, 0x2
L0005: ret
C.Method2()
L0000: mov eax, 0x2
L0005: ret
C.Method3()
L0000: mov eax, 0x2
L0005: ret
C.getInt()
L0000: mov eax, 0x2
L0005: ret
C.Method4()
L0000: mov eax, 0x2
L0005: ret
Примечание : Выше приведено только представление о том, как все они могут быть преобразованы в один и тот же набор команд, в действительности каждый метод в примере с острым шрифтом io будет вставлен в mov ecx, 0x2
, как Пассант Ганса , правильно указанный в комментариях
Короче говоря (и в этой ситуации) нет заметной разницы с вашими вариантами кода, поэтому все сводится к тому, как вам нравится писать код. Однако в других ситуациях платформа использует сложный набор правил для управления оптимизациями, которые могут быть не такими четкими.
Сказав все это: лучше не беспокоиться о таких оптимизациях преждевременно и сосредоточиться на написании хороших чистый код, который легко читается и поддерживается, и если у вас есть проблемы с производительностью, потратьте время на профилирование. Хотя такой подход кажется расточительным, время, потраченное на преждевременную оптимизацию, теряется впустую (если только у вас нет проблем с производительностью). Есть больше фи sh для жарки и еще больше денег.