関数内で一時変数を作成することと、この変数に割り当てられた値を直接返すこととでは、パフォーマンスの低下やメモリ消費に違いがありますか?
たとえば、次の関数 (GetValue) のうち、パフォーマンスとメモリの節約の点で優れているのはどれでしょうか。あるいは、両方ともまったく同じでしょうか。
ケース1:
private string GetValue()
{
return this.GetResult();
}
private string GetResult()
{
// Code here that return a big string...
}
ケース2:
private string GetValue()
{
string result = this.GetResult();
return result;
}
private string GetResult()
{
// Code here that return a big string...
}
ありがとう。
ベストアンサー1
これらの基本的な状況では、読みやすさはいつもパフォーマンスの違いよりも重要です。これはせいぜいマイクロ最適化であり、大部分は時間の無駄であることがわかります。これによって節約した分は、非決定的な GC 実行によって消費されてしまいます。
ほとんどの場合、コンパイラが最適化を許可されている場合、結果のコードに違いはありません。この場合、結果の IL には、スタック上の文字列を参照するための追加の操作コードがいくつかあるようですが、その後 JIT がこれを使用して何を行うかは誰にもわかりません。
時々、戻る前に一時変数を確認してから戻りますが、パフォーマンスへの影響を心配することはありません。最も重要なことは、パフォーマンスの問題を解決するためにこの種の改善が必要だったケースを見たことがないことです。