2つのコードを比較してみましょう。
String str = null;
//Possibly do something...
str = "Test";
Console.WriteLine(str);
と
String str;
//Possibly do something...
str = "Test";
Console.WriteLine(str);
私はいつも、これらのコードは同じだと思っていました。しかし、これらのコードをビルドし(最適化をチェックしたリリースモード)、生成されたILメソッドを比較した後、最初のサンプルにはさらに2つのIL命令があることに気付きました。
最初のサンプルコードIL:
.maxstack 1
.locals init([0] string str)
IL_0000:ldnull
IL_0001:stloc.0
IL_0002:ldstr "Test"
IL_0007:stloc.0
IL_0008:ldloc.0
IL_0009:call void [mscorlib] System.Console :: WriteLine (文字列)
IL_000e:ret
2番目のサンプルコードIL:
.maxstack 1
.locals init([0] string str)
IL_0000:ldstr "Test"
IL_0005:stloc.0
IL_0006:ldloc.0
IL_0007:call void [mscorlib] System.Console :: WriteLine(string)
IL_000c:ret
おそらく、このコードはJITコンパイラによって最適化されていますか?では、nullを使用したローカルbethod変数の初期化は、パフォーマンスに影響を与えますか(非常に単純な操作であることは理解していますが、どのような場合でも)、回避する必要がありますか?よろしくお願いします。