2012-01-23 3 views
0

사전 목록, List<Dictionary<String,Object>>이 있습니다. 키는 일부 추상 레코드의 식별자입니다. 이 사전은 여러 곳에서 왔습니다. 각 사전의 크기는 [0, 1000] 범위에 있습니다.사전 목록 (검색 최적화, C#)

모든 사전에는 고유 키가 있습니다. 일부 사전을 축적 한 후에는 키로 검색해야합니다. 모든 사전에 목록 및 호출 검색 방법을 반복하거나 모든 사전을 하나로 복사하여 수행 할 수 있습니다. 이러한 접근 방식은 성능이 좋지 않습니다. 이 작업을 최적화하는 방법에 관심이 있습니다.

편집 : 감사합니다. 어쩌면 축적 방법을 바꾸고 그 결과로 문제 자체를 없앨 것입니다!

+0

'List'를 반복하고 각'Dictionary'를 쿼리하지 않을 것입니다. 각'Dictionary'에'Add '하는 동안 키의 데이터 구조를 유지한다면 최적화 할 수 있습니다. 어쩌면 다른 저장 방법을 고려할 때가 있을까요? – Yuck

+0

별도의 사전을 유지하는 이유는 무엇입니까? – weston

+0

@ weston 별도의 검색 때문에) – Edward83

답변

1

초기 채우기 단계 후에 많은 키 가져 오기가있을 것으로 예상됩니까? 그렇다면 모든 것을 단일 사전에 통합하십시오. 개를 가져 오는 경우에만 개를 가져올 수 있습니다. 모든 사전을 요청하는 것보다 나을 수는 없습니다.

물론 하이브리드 방식을 만들 수 있습니다. 합병 된 결과에 대한 새로운 (처음에는 비어있는) 사전을 만들고 요청할 때마다 나머지를 검색하여 채워 넣습니다. 이미 "빅"사전에없는 키.

어떤 사전에 특정 키가 있는지 예측할 방법이 없습니까?

1

경우 key를 지정하여 관심의 사전을 지역화 할 수있는 방법 이, 당신은 당신이 keydictionary에 일치하도록 시도 할 수 있습니다 상호 연관 테이블을 생성, naturaly, 시도 할 수 있습니다.

, 이럴 단지 컬렉션을 반복하고 STANDART for 및 코딩 하지 더 좋은 LINQ를 사용하고있을 수는 key을 요구 다른 옵션이 표시되지 않은 경우.

1

Jon이 말한 것을 추가하면 PowerCollections라는 MultiDictionary라는 API가 있습니다. 만약 내 기억이 손상되지 않았다면, 당신이 언급 한 목적을 위해 이것을 사용할 수 있다고 믿습니다. 당신이 "속도"(동기의 가정) 특정 "추상적 기록"유형으로 제한됩니다 검색 할 사전을 많이 가지고있는 것처럼

http://powercollections.codeplex.com/discussions/242163

+1

흥미로운 링크! 고맙습니다;) – Edward83

1

는 소리가 난다.

하나의 사전으로 도망 갈 수는 있지만 제한된 검색을 수행하면 찾은 결과가 결과가 필요한 추상 레코드 유형인지 확인합니다. 현재와 ​​같이 각각의 모든 추상 레코드 유형에 대해 하나의 사전을 유지하는 것이 아닙니다.