2011-07-15 6 views
1

C++がオブジェクトを返すたびに、メソッドが返されるとオブジェクトのすべての内容が新しいオブジェクトにコピーされます。そんなことはありません、AFAIK。double [] GenerateArray()とvoid GenerateArray(ref double [])同じ

私の質問は、C#では、スピードとメモリ消費の点で2つ以下の同等ですか?

double[] GenerateArray() 

void GenerateArray(ref double[] result) 

答えて

2

彼らはパーにかなり-くらいになります。 outrefより優先されることに注意してください。しかし、パフォーマンスには明確な区別がないので、私は、より寛容なdouble[] GenerateArray()からreturnへの実装がはるかに優れていることを強く示唆しています。特にout/refは、混乱の原因となることが多く、(式として戻り値を使用するのではなく)目的のために余分な変数を導入する必要があります。

非常にマイナーな、これも一つ少なく間接GenerateArray内であることを意味 - 意味:ref/out用法で、result上の任意のアクセスは最初ref参照解除配列リファレンスを取得する必要があり、その後、を参照解除アレイに。

+0

もう1つの違いは、「out」パラメータは共変ではないということです。 – CodesInChaos

+1

@CodeInChaos trueですが、 'double'配列は共変動しません; p –

関連する問題