0

これはほぼ間違いなくばかげた質問です。私の弁護では私は病気です。ともかく。

オブジェクトのメモリリストがあります。次の式を使用して、オブジェクトのリストから関心のある文字列を引き出しました。

var myStrings = myListOfObjects.Select(r => r.MyString);

これにより、文字列のIEnumerableが提供されます。myStringsは、後で私のコードで何度も再利用されます。私が疑問に思っているのは、これを使用する前にToArrayまたはToList(つまり「貪欲な」演算子)を実行することで、パフォーマンス上の利点はありますか?(したがって、私の操作は配列/リストに対して直接行われます。)

myStringsは、使用時に完全に再利用されます。

4

3 に答える 3

5

これは速度と空間のトレードオフです。

コールバックの計算コストが高い場合Select()は、一度計算して後で保存することをお勧めします。

そうでない場合は、おそらくストレージを節約して毎回計算したいと思うでしょう。

ランダム アクセスが必要な場合は、 O(n)ToList()であるため、必ず を呼び出す必要があります。ElementAt()

終了後に配列をトリミングする必要があるため、ToList()は よりも高速であることに注意してください。ToArray()ToArray()

于 2012-12-03T15:16:55.477 に答える
1

myStrings単なるクエリであり、コレクションではありません。複数回必要で、(メモリ用に) 大きすぎない場合は、ToArrayまたはを使用してコレクションを作成することをお勧めしますToList

それ以外の場合は、実行が遅延されているため、アクセスするたびにクエリを実行しています(経由でforeach)。これにより、クエリが別の結果を返す場合、厄介なバグが発生する可能性もあります。

于 2012-12-03T15:17:18.293 に答える
0

List または Array 機能が特に必要でない限り、IEnumerable のままにしておくのが最善です。キャストなし == 計算サイクルの削減。

于 2012-12-03T15:17:28.130 に答える