1

전화 번호부와 같은 항목이 있습니다 (이름 + 주소). 출처는 웹 사이트에 있으며, 카운트는 1K 개가 넘습니다.병렬 foreach ConcurrentDictionary <string, string> add

질문은 다음과 같습니다

내가 ParallelForeachConcurrentDictionary을 구현/어떻게 사용합니까?

나뿐만 아니라 더 나은 수행합니다 요청할 수 있습니다 :

ConcurrentDictionary & ParallelForeach

이름 으로

Dictionary & foreach

대 중복이 허용되지
존재를 열쇠, 그리고 그것 hink 나는 정확하게 ConcurrentDictionary에 키가 존재하지 않는 경우에만 ( TryAdd)을 추가하는 자체 내장 함수가 있음을 잘 알고 있습니다. 그래서 난 분명히 균형 내가 주어진에서 이름을 & 주소를 추가하려면 어떻게 그래서 표준 연속 Dictionary

보다는 ConcurrentDictionary으로 돌고 볼 수있는 그 시점에서, 그래서 이미의 걱정되어 가지고 중복 키를 추가 허용하지 않는 문제 데이터 소스를 읽고 병렬 대행을 통해 ConcurrentDictionary로로드하십시오.

답변

2

이 수가 1K 레코드를 초과합니다.

1K 이상? 왜냐하면 1K 레코드는 병렬화가 필요없이 눈 깜짝 할 사이에 추가되기 때문입니다.

또한 네트워크를 통해 데이터를 가져 오는 경우이 값은 으로 크게은 사전에 추가하는 데 드는 비용이 적습니다. 그러므로 데이터를 병렬 처리하여 데이터를 병렬화 할 수 없으면 병렬로 사전에 데이터를 추가하는 코드가 복잡해집니다.

+0

@JonSkeet, 헤이 존, 이미 확장 된 WebClient를 통해 병렬 처리 측면에 대한 몇 가지 추가 수정 기능을 가져올 수있게 만들었습니다. 여러 소스를 가져 오기 위해 병렬 작업을 통해 가져 왔지만 지금은 하나의 소스만으로도 그렇게 추측됩니다. 실제로 페치 * 부분에 평행 할 것은 없습니다. –

+0

@JbobJohan : Range 헤더를 사용하여 한 번에 데이터의 일부분을 가져 오지 않는 한 그렇게 들리지만 (매우 복잡 할 것입니다). –

+0

나는 약간의 시간이 미친 듯이 복잡하지만 당신이 마지막 문장에서 준 키워드 (비록 내가 아이디어를 얻고있는 키워드를 통해 Google에이 새로운 탭을 썼다.) ... 예를 들어 브라우저와 파일 다운 로더에 의해 사용되고있다. 부품지도를 유지하면서 데이터를 분할하는 방법입니다 ... 비트 급류 또는 그러한 프로그램에서 사용되는 것과 같습니다 ... 요청이 큰 데이터라면 사용할 수 있습니다 ... 좀 더 읽을 것입니다. ... –