53

私は現在、オブジェクトを保持するためList<T>のキューとしてを使用しています(lst[0]thenを使用)。lst.removeAt(0)一度に最大約20個のアイテムがあります。実際のQueue<T>授業があることに気づきました。キューのように振る舞うQueue<T>オーバーを使用することに何か利点(パフォーマンス、メモリなど)があるかどうか疑問に思っていますか?List<T>

4

4 に答える 4

77

パフォーマンスのプロファイルを作成できます。この場合、アイテムが非常に少ない場合でも、実際に価値のある違いを得るには、コードを何百万回も実行する必要があります。

私はこれを言います:Queue<T>あなたの意図をより明確に明らかにします、人々はキューがどのように機能するかを知っています。

RemoveAt(magicNumber)キューのように使用されているリストは、特に不必要なインデックス作成とコードがたくさんある場合は、それほど明確ではありません。Dequeueコード保守の観点からは、はるかに消耗品です。

これで測定可能なパフォーマンスの問題が発生する場合は、それに対処できます。潜在的なパフォーマンスの問題すべてに事前に対処しないでください。

于 2012-04-30T08:37:32.427 に答える
15

Queue<T>クラスがキューを実装し、クラスがリストを実装するという事実に加えてList<T>、パフォーマンスの違いがあります。

List<T>キュー内のすべての要素から最初の要素を削除するたびに、コピーされます。キューに20個の要素しかない場合は、目立たない可能性があります。ただし、次の要素をデキューするQueue<T>と、そのようなコピーは発生せず、常に高速になります。キューが長い場合、違いが大きくなる可能性があります。

于 2012-04-30T08:46:47.770 に答える