3 つの異なるソースからの要素を調整する方法を探しています。キー (文字列) とバージョン (長い) だけを持つように要素を単純化しました。
リストは同時に取得されます (別のデータベース クエリから 2 つ、別のシステムのメモリ キャッシュから 1 つ)。
私の最終結果では、3 つのソースすべてで同一のバージョンではない要素のみを気にします。したがって、私が気にする結果は、各システムの対応するバージョンを含むキーのリストになります。
Element1 | system1:v100 | system2:v100 | system3:v101 |
Element2 | system1:missing | system2:v200 | system3:v200 |
同じバージョンの要素は破棄できます。
私が考えたこれを達成する2つの方法は
すべてのデータソースが取得を完了するのを待ってから、各リストをループして、キーの結合 + 3 つのバージョンすべてでマスター リストを集約します (同一のアイテムはすべて破棄します)。
最初のリストの取得が完了するとすぐに、それをディクショナリ (.net 4.0 で提供) などの並行コレクションに入れ、残りのリストが利用可能になり次第 (並行コレクションに) 集約を開始します。
私の考えでは、2 番目のアプローチの方が少し速くなりますが、おそらくそれほど速くはありません。3 つのソースすべてが存在するまで、私は実際には多くのことを行うことができないため、2 番目のアプローチから得られるものは多くなく、競合が発生します。
たぶん、これについてはまったく別の方法がありますか?また、バージョンは long を使用して保存され、数十万 (場合によっては数百万) の要素が存在するため、メモリ割り当てが問題になる可能性があります (ただし、これらのオブジェクトは存続期間が短いため、おそらく大きな問題ではありません)。