2012-04-01 3 views
0

NewGuidsに含まれていないOldGuidsのリストが必要なので、Containsメソッドを使用しました。問題は既に30分以上実行されています。どのくらい時間がかかりますか?Linqを最適化する方法が含まれています

Dim OldGuids As New List(Of Guid) ' 18 million rows 
Dim NewGuids As New List(Of Guid) ' 6 million rows 
Dim Filtered = From n In OldGuids Where Not NewGuids.Contains(n) 
+2

4月1日?それは取られます:http://stackoverflow.com/questions/1705008/simple-proof-that-guid-is-not-unique –

+0

リンクのためにありがとう.. – Ezi

答えて

2
Filtered = OldGuids.Except(NewGuids) 

を(あなたは重複を保持したい場合は、これはあなたが望むものではない、これが唯一のユニークな要素を返すことに注意してください)を書くことができます。


var newGuidSet=new HashSet<Guid>(newGuids); 
Filtered = OldGuids.Where(g=>!newGuidSet.Contains(g)); 
+0

それははるかに速く含まれていますか? – Ezi

+0

これは高速ですが、約400MBまたはRAMが必要です。 – CodesInChaos

+0

システムのメモリが不足していますが、ハードドライブに十分な空き容量があります – Ezi

3

HashSet<Guid>を使用してください。

その後、OldGuids.IntersectWith(NewGuids)

+0

'IntersectWith'はここで助けません。あなたは質問に「not」を見逃しました。 – CodesInChaos

+0

使用すべきメソッドは 'ExceptWith'で、' IntersectWith'ではありません –

関連する問題