2017-11-03 4 views
-2

次のうちどれがゴミをより多く割り当てるか?さらに、ボクシングパラメタまたはパラーム配列を割り当てるものは何ですか?

void LogParams(string format, params object[] args) 
{ 
} 

void LogArgs(string format, object arg0, object arg1, object arg2) 
{ 
} 

LogParams("Hello, {0}, {1}, {2}", "Tom", "Dick", "Harry"); 
LogArgs("Hello, {0}, {1}, {2}", "Tom", "Dick", "Harry"); 

背景には()を呼び出し、私は最終的にString.Formatのに煮詰めるログメッセージを最適化する方法を検討しています、ログメッセージのしかし、多くは、基本的にちょうど一緒に文字列に参加しています。

+4

'string'はすでに参照型です。ボクシングは関係ありません。 – xxbbcc

+3

しかし、どちらがより多くのゴ​​ミを生成するか知りたければ、2つのスニペットをプロファイルして調べてください。 – Servy

+0

ああ申し訳ありませんが、はい、ボクシングの私の理解に混乱。 – JimmyDeemo

答えて

0

まず、ボクシングはありません。stringは値の種類ではないためです。

最初の方法では、3つの要素(各文字列参照ごとに1つ)を持つ配列を作成する必要があるため、より多くのメモリを使います。次に、各文字列が作成され、参照が配列に割り当てられます。メソッドを呼び出す前に、配列refrenceがスタックにプッシュされます。

他の方法では、ヒープ上に3つの文字列のみが作成されます。メソッドを呼び出す前に、参照はスタックに直接プッシュされます。

基本的には、スタック上の領域をヒープ上の領域を節約するために節約します。しかし、アレイの作成はより高価です(追加のため)。

+0

ええ、私はこれすべてを今見ます。私は主に文字列について混乱してしまったので、それは私が混乱してしまった場所だと思う、答えに感謝する。 – JimmyDeemo

関連する問題