少なくともある程度まで、BCLコレクションはページングの懸念を考慮に入れているようです。また、CPUキャッシュの懸念も考慮に入れています(メモリの局所性は、さまざまな方法で両方に影響を与える可能性があるため、いくつかの点で重複しています)。
それを考慮してくださいQueue<T>
内部ストレージに配列を使用します。純粋にランダムアクセスの用語では(つまり、ページングやCPUキャッシュのフラッシュにコストがかからない場合)、これは適切な選択ではありません。キューは、ほとんどの場合、ある時点でのみ追加され、別の時点で削除されるため、単一リンクリストとしての内部実装は、ほぼすべての方法で勝ちます(さらに言えば、キューの反復に関しては、これもサポートされます)。 -リンクリストは、この点で、純粋なランダムアクセスの状況で配列よりもはるかに悪くなることはありません)。配列ベースの実装が単一リンクリストよりも優れているのは、ページングとCPUキャッシュを考慮した場合です。そのMSは、純粋なランダムアクセスの状況ではより悪いが、ページングが重要である実際のケースではより良いソリューションを求めたため、ページングの影響に注意を払っています。
もちろん、それは明白ではありません-そしてそうであるべきではありません。外部からは、キューのように機能するものが必要です。内部を効率的にすることは別の関心事です。
これらの懸念は他の方法でも満たされます。たとえば、GCの動作方法では、移動するオブジェクトによって断片化が少なくなるだけでなく、ページフォールトも少なくなるため、必要なページングの量が最小限に抑えられます。他のコレクションも、最も直接的な解決策が示唆するよりもページングの頻度を少なくする方法で実装されます。
それは私が見たものから私に際立っているほんの少しのことです。そのような懸念は、.NETチームの他の多くの場所でも考慮されていると思います。他のフレームワークと同様に。Cliff ClickがJavaロックフリーハッシュテーブル(C#実装のチェックを本当に終えています)に関して繰り返し言及している1つの大きなパフォーマンス上の懸念は、ロックフリー並行性(演習の要点)の問題とは別に、キャッシュラインであると考えてください。 ; そして、それは彼が却下しないもう1つのパフォーマンス上の懸念でもあります!
また、ほとんどのコレクションのほとんどの用途は、とにかく1ページに収まると考えてください。
独自のコレクションを実装している場合、または標準のコレクションを特に頻繁に使用している場合、これらは考慮する必要があることです(「いや、問題ではない」で十分な場合もあれば、そうでない場合もあります)が、そうではありません。つまり、BCLから得られるものに関してはまだ考えられていないということです。