Много ли ненужных переменных (наподобие тех, которые я объяснил в этом случае) может вызвать проблемы с производительностью в C #?
Нет, они не будут.
Компилятор достаточно умен, чтобы удалять все ненужные вещи при компиляции в режиме Release и оптимизировать ваш код до:
public string Foo()
{
return "foo bar";
}
или, точнее, до:
.method public hidebysig instance string Foo() cil managed
{
.maxstack 1
.locals init (
[0] string str)
L_0000: ldstr "foo bar"
L_0005: stloc.0
L_0006: ldloc.0
L_0007: ret
}
, который по сравнению с аналогом режима отладки совершенно другой:
.method public hidebysig instance string Foo() cil managed
{
.maxstack 1
.locals init (
[0] string _foo,
[1] string CS$1$0000)
L_0000: nop
L_0001: ldstr "foo bar"
L_0006: stloc.0
L_0007: ldloc.0
L_0008: stloc.1
L_0009: br.s L_000b
L_000b: ldloc.1
L_000c: ret
}
Это определенно не то, о чем вам следует беспокоиться с точки зрения производительности.Вы должны беспокоиться о читабельности своего кода, и этот пример оптимизированного кода кажется гораздо более читабельным, чем ваша версия.
Так что вы можете доверять компилятору, который постоянно совершенствуется и способен оптимизировать такие ситуации.