2

私のメソッドで、いくつかのIEnumerablesを渡すと言います(おそらく、dbなどから多数のオブジェクトを取得するためです)。

次に、objects1の各オブジェクトについて、同じobject.iDを持つobjects2からdiffobjectを引き出します。

(resharperによると)複数の列挙が必要ないので、objects2をobject.iDでキー設定された辞書にすることができます。次に、それぞれについて1回だけ列挙します。(二次質問)それは良いパターンですか?

(主な質問)何が大きすぎますか?どの時点でこれは恐ろしいパターンになるでしょうか?辞書にはオブジェクトが多すぎますか?

4

2 に答える 2

3

内部的には、20億を超えるアイテムを持つことはできません。辞書内での配置方法はかなり複雑なので、10億個のアイテム(たとえば、16ビット値の場合は2GB)を処理する場合は、それらをデータベースに保存して、データアクセスコードを使用してそれらを取得します。

ただし、Objects1とObjects2はどこから来ているのでしょうか。これはDBレベルで実行できるように聞こえますが、C#で実行するよりもはるかに効率的です。

KeyValuePair[]の使用を検討することもできます。

于 2012-06-04T22:31:25.293 に答える
0

辞書はKeyValuePairのインスタンスを格納します

あなたがしたいのが彼らの与えられた辞書で値を調べることだけであるならKey、そうです、辞書は行く方法です-彼らはそれをするのにかなり速いです。Valueただし、アイテムの並べ替えや、またはそのプロパティを使用してアイテムを検索する場合は、別のものを使用することをお勧めします

サイズに関しては、サイズが大きくなるにつれて少し遅くなります。いくつかのベンチマークを実行して、ニーズにどのように影響するかを確認する価値がありますが、タイプまたは範囲に基づいて、値を複数の辞書に分割できます。http://www.dotnetperls.com/dictionary-size

ただし、「それでは、それぞれについて1回だけ列挙する」と言うと、それは少し間違っていることに注意してください。objects1完全に列挙されますが、の辞書はobjects2列挙されません。を使用して値を取得する限りKey、キーをハッシュし、その結果を使用して値を格納する場所を計算するため、辞書は要求した値に非常にすばやく到達できます。理想的にはintを使用します。これは、intをKey直接ハッシュとして使用できるためです。それらを列挙することはできますが、を使用してオブジェクトを検索することをお勧めしますobjects2Dictionary[key]

于 2012-06-04T22:34:36.583 に答える