私は文字列、整数、および倍数を含む "litem"クラスを持っています。私は "myList"と呼ばれるリスト(litem)を持っています。リテームの文字列要素であるlitem.c1に基づいて、myListに重複を見つけることができます。私はそれらの重複要素を、一意のIDを持つ重複したペアにリンクすることによって変更する必要があります。問題は、データが大きく、コードが非常に遅いことです。 myListには220万エントリがあります。私は重複にこの方法を見つける:重複を見つけ、リスト(クラス)を高速に返します
var duplicateItems = myList
.AsParallel()
.GroupBy(x => x.c1)
.Where(x => x.Count() > 1)
.Select(x => x.Key)
.ToList();
これは、約3秒で実行され、重複のlitem.c1値は約40.000の文字列を返します。そして、私が実行します。
var result = myList
.AsParallel()
.Where(item => duplicateItems.Any(d => d.Equals(item.c1)))
.ToList();
これは私が必要とする80.000 litemsのリストを返しますが、100%i7のCPUを搭載しながら、それが30分以上実行しています。この後、私はresutにforeachを使用して、見つかった重複リテーム間のリンクを追加します。質問はどのように安い方法で結果を得ることができるのですか?
duplicateItemsは、リストの代わりにHashSetである必要があります。 –
schglurps