Давайте сравним две части кода:
String str = null;
//Possibly do something...
str = "Test";
Console.WriteLine(str);
и
String str;
//Possibly do something...
str = "Test";
Console.WriteLine(str);
Я всегда думал, что эти части кода равны. Но после того, как я собрал этот код (режим выпуска с проверкой оптимизации) и сравнил сгенерированные методы IL, я заметил, что в первом примере есть еще две инструкции IL:
1-й пример кода IL:
.maxstack 1
.locals init ([0] строка str)
IL_0000: ldnull
IL_0001: stloc.0
IL_0002: ldstr "Тест"
IL_0007: stloc.0
IL_0008: ldloc.0
IL_0009: вызов void [mscorlib] System.Console :: WriteLine (строка)
IL_000e: рет
2-й пример кода IL:
.maxstack 1
.locals init ([0] строка str)
IL_0000: ldstr "Тест"
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: вызов void [mscorlib] System.Console :: WriteLine (строка)
IL_000c: рет
Возможно, этот код оптимизирован JIT-компилятором?
Так как инициализация локальной переменной bethod со значением null влияет на производительность (я понимаю, что это очень простая операция, но в любом случае), и мы должны избегать этого?
Заранее спасибо.