2

自分のコレクションをローリングする以外に、既存の(.NET 3.5)コレクションとIDictionaryで使用するメモリの量が最も少ないのではないかと思います。

私は現在使用しています

  • List <int>。ここでは、アイテムを追加するだけで、後でそれを繰り返し処理します。
  • Dictionary <int、int>。ここでは、キーと値のペアのみを設定して取得します。

注:私は成熟した最適化を行っています。

編集:事前にサイズはわかりませんが、おおよそ、辞書は約789679要素に拡大し、リストには平均して10〜20個の要素が含まれます。

4

2 に答える 2

3

インデックス作成は、常にスペースとパフォーマンスの間のトレードオフです。リストインターフェイスとディクショナリインターフェイスの両方で最もメモリを消費しない実装は、常にフラット配列になります。もちろん、これは辞書のパフォーマンスがひどくなり、挿入のパフォーマンスが(どちらの場合も)悪くなることを意味します!

10〜20の要素のリストについては、率直に言って、調査すらしないでください。を使用するだけList<T>です。このような非常に些細な量のデータについては、答える賢明な質問はありません。

789679でさえ巨大ではありません。ただし、メモリに重点を置いている場合は、データを事前に並べ替えるだけがおそらく最善の策です。次に、バイナリ検索を使用してアイテムを見つけることができます。ハッシュテーブルの実装ほど高速ではありませんが、メモリははるかに少なくなります。2つの配列(またはタプルの単一の配列)だけです。または言い換えると:使用SortedList<TKey,TValue>

于 2012-07-18T08:50:41.993 に答える
2

CPUサイクルを犠牲にして、メモリを節約できます。

int[] data;
{
   List<int> temp = ....;
   // fill the list
   data = temp.ToArray();
}

事前に要素の数がわかっている場合は、いくつかの手順を省くことができます。

辞書を置き換えるのはそれほど簡単ではありません。

于 2012-07-18T08:19:08.023 に答える