私には2つの状況があります:
static void CreateCopyOfString()
{
string s = "Hello";
ProcessString(s);
}
と
static void DoNotCreateCopyOfString()
{
ProcessString("Hello");
}
これら 2 つの状況の IL は次のようになります。
.method private hidebysig static void CreateCopyOfString() cil managed
{
// Code size 15 (0xf)
.maxstack 1
.locals init ([0] string s)
IL_0000: nop
IL_0001: ldstr "Hello"
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: call void ConsoleApplication1.Program::ProcessString(string)
IL_000d: nop
IL_000e: ret
} // end of method Program::CreateCopyOfString
と
.method private hidebysig static void DoNotCreateCopyOfString() cil managed
{
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello"
IL_0006: call void ConsoleApplication1.Program::ProcessString(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::DoNotCreateCopyOfString
string init
最初のケースでは、 、 、の余分な呼び出しがstloc.0
ありldloc.0
ます。これは、文字列が最初にローカル変数に格納されるのではなく、直接メソッドに渡される 2 番目のケースよりも、最初のケースのパフォーマンスが低いことを意味しますか?
質問を見ましたnull を使用したローカル変数の初期化はパフォーマンスに影響しますか? しかし、ここで知る必要があることとは少し違うようです。ありがとう。