2012-02-29 12 views
3

私はUDTが、私は非常に多くの場合、サイズによって、時間によって、この辞書をソートし、する必要がパフォーマンス

// simplified structure 
class UDT 
{ 
    public DateTime datetime; 
    public double size; 
}; 

として定義されている辞書(文字列、UDT)を持っています。私は今のようなことをしています -

var result = dict.OrderBy(x => x.Value.datetime).ThenBy(x => x.Value.size); 

foreach (KeyValuePair<string, UDT> val in result 
{ 
} 

この辞書のサイズは非常に大きく、アプリケーションのボトルネックのほとんどはここにあるようです。項目が辞書に追加されるとき、またはより効率的に並べ替えるときに、辞書をソートしたままにする方法はありますか?

+0

辞書の値でソートする必要がありますか?それは非常に非効率的です。コレクションを再ソートする頻度はどのくらいですか?私は、SortedDictionaryを使用して、キー内のすべての値(カスタム比較関数を使用)を使用するか、リストで使用するクラスにすべての値を入れ、必要に応じて(カスタム比較関数を使用して)並べ替えます。 – Joe

答えて

2

より適切な解決策は、からメモリにソートしないで読み込むと、ソートすることによって、既に行っていることを行うことです。私はオーバーヘッドの量を減らすために、Listとしてソートされた結果をキャッシュすることをお勧めします。

+4

-1を説明するケア? –

+0

SortedDictionaryはここではまったく役に立ちません。彼はキーではなく、ペアの値の部分でソートしています。 – Joe

+0

@Joe - おそらくより適切な答えで更新されました。 –

1

IDictionaryの値部分の項目を繰り返し並べ替えなければならない場合は、少なくとも大規模なデータセットでは間違っています。

挿入時にデータを正しい順序(たとえば、SortedList、カスタム比較関数を使用)で保存するか、リストを次に必要に応じて並べ替えることができるコンテナを使用します。カスタム比較)。実際にデータを追加する頻度と再ソートの頻度に依存します。これを測定する必要があります。