0

たくさんの物があります。各オブジェクトには一意のGUIDがあります。このGUIDによるマップオブジェクトが必要です。現在、System.Collections.Hashtableを使用しています。問題は、オブジェクトハッシュセットを追加するとサイズが変更され、ラージオブジェクトヒープが断片化することです。また、オブジェクトの2倍のメモリが必要です。メモリ使用量を減らす必要があります。

必要なデータ構造の機能:

  • オブジェクトを追加
  • IDでオブジェクトを削除
  • IDでオブジェクトを検索
  • データ構造内のすべてのオブジェクトを実行します(foreach)

この目的に最適なデータ構造は何ですか?赤黒木とAVL木があることは知っていますが、どの木を使用するのが良いかわかりません。一意の識別子または文字列によるマッピングに適した別のツリーデータ構造があるのではないでしょうか。どのデータ構造がより速く機能しますか?

4

2 に答える 2

0

ハッシュテーブルの500,000エントリは、実際にはそれほど多くありません。ハッシュテーブルを作成するときに大きくなることをハッシュテーブルに伝えるだけです。

var myDict = new Dictionary<key,val>(1000000);

これにより、1,000,000近くの要素を収容できる辞書が作成されます。1,000,000に近づくと、サイズが変更されます。古い非ジェネリックHashtableは、再割り当てを制御するために、さらに多くの制御を提供し、負荷率を指定できるようにします。ここを見てください。

于 2012-06-20T10:27:31.663 に答える
0

データ構造は静的か動的か? 静的な場合は、完全ハッシュの使用を検討してください。メモリのオーバーヘッドをそれほど増やすことなく、ハッシュテーブルの利点を得ることができます。

問題を解決するためにツリーを当てにしないでください...ツリーにはかなり高いメモリオーバーヘッドがあり、クエリと更新が遅くなる傾向があります。

于 2012-06-20T07:25:37.833 に答える