値を直接返す場合と一時変数を作成する場合のパフォーマンスの違い 質問する

値を直接返す場合と一時変数を作成する場合のパフォーマンスの違い 質問する

関数内で一時変数を作成することと、この変数に割り当てられた値を直接返すこととでは、パフォーマンスの低下やメモリ消費に違いがありますか?

たとえば、次の関数 (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 がこれを使用して何を行うかは誰にもわかりません。

時々、戻る前に一時変数を確認してから戻りますが、パフォーマンスへの影響を心配することはありません。最も重要なことは、パフォーマンスの問題を解決するためにこの種の改善が必要だったケースを見たことがないことです。

おすすめ記事