2012-04-01 2 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) 

OldGuids.IntersectWith(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>을 사용해야합니다.

그런 다음 쓸 수

+0

'IntersectWith' 여기 도움이되지 않습니다. 당신은 질문에서'not '을 놓쳤습니다. – CodesInChaos

+0

사용해야하는 메소드는'ExceptWith'이지,'IntersectWith'가 아닙니다 –