0

述べたように、私は行うことの利点があるかどうか興味があります:

return someNumber = CalculateResults(parameter);

対実行:

someNumber = CalculateResults(parameter);
return someNumber;

または実行中:

return CalculateResults(parameter);

どちらか一方を使用することで得られるパフォーマンスはありますか?

4

4 に答える 4

2

アクティブな最適化を使用すると、おそらく3つすべてが同じになりますが、最適化を行わないと、わずかに異なる結果が生成されます。

最初と2番目はスコープ内で変数を宣言して返す必要がありますが、最後はそうではありません。私は次のプログラムをコンパイルしようとしました:

int Calculate()
{
    return 42;
}

int FirstCase()
{
    int x;
    return x = Calculate();
}

int SecondCase()
{
    var x = Calculate();
    return x;
}

int ThirdCase()
{
    return Calculate();
}

LINQPadを使用した出力:

FirstCase:
IL_0000:  nop         
IL_0001:  ldarg.0     
IL_0002:  call        UserQuery.Calculate
IL_0007:  dup         
IL_0008:  stloc.0     // x
IL_0009:  stloc.1     // CS$1$0000
IL_000A:  br.s        IL_000C
IL_000C:  ldloc.1     // CS$1$0000
IL_000D:  ret         

SecondCase:
IL_0000:  nop         
IL_0001:  ldarg.0     
IL_0002:  call        UserQuery.Calculate
IL_0007:  stloc.0     // x
IL_0008:  ldloc.0     // x
IL_0009:  stloc.1     // CS$1$0000
IL_000A:  br.s        IL_000C
IL_000C:  ldloc.1     // CS$1$0000
IL_000D:  ret         

ThirdCase:
IL_0000:  nop         
IL_0001:  ldarg.0     
IL_0002:  call        UserQuery.Calculate
IL_0007:  stloc.0     // CS$1$0000
IL_0008:  br.s        IL_000A
IL_000A:  ldloc.0     // CS$1$0000
IL_000B:  ret         

3番目のケースは少し短いです。変数を割り当てるよりも流暢に感じるので、私もそのアプローチを好みます。変数を使用する唯一の理由は、変数を介して戻り値に意味のある名前を付けることにより、メソッドが何をするかを「文書化」しようとすることです。

于 2013-01-15T15:33:59.470 に答える
1

最初の2つの間に実際的な利点はありませんが、私の意見では、2番目の方が最初の方よりも読みやすくなっています。

return CalculateResults(parameter);

まったく持続しない場合はさらに良いですsomeNumber、あなたはそれに注意する必要があります。

必要な命令が1つ少なくなります(オプティマイザーがすでにそれを行っていても驚かないでしょうが)

于 2013-01-15T15:32:29.390 に答える
1

別々の行にあると、Jacobが述べたようにデバッグに役立ちます。返されるデータを保存/操作する必要がない場合は、変数を割り当てずに先に進んで戻る必要があります。

于 2013-01-15T15:34:04.607 に答える
0

私はこれが好きです

return someNumber = CalculateResults(parameter); 

可能であれば。行を保存し、デバッグ時に役立ちます。someNumberにカーソルを合わせるだけで、戻り値を取得できます。

割り当て操作を行わないことによるパフォーマンスの向上は無視できます。(コンパイラーはおそらくそれを最適化するでしょう。)

于 2013-01-15T15:34:17.800 に答える