2009-07-20 4 views
0

현재 거대한 XML 파일을 구문 분석하는 응용 프로그램을 작성하고 있습니다.일괄 처리 응용 프로그램 병렬 처리

각 파일마다 다른 프로세스가 있지만 모두 단일 개체 모델로 구문 분석됩니다.

현재 각 XML 파일에서 구문 분석 된 개체는 단일 컬렉션으로 이동합니다.

이 컬렉션은 구문 분석 도중 사용됩니다. 유사한 객체가 이미 존재하면 count를 추가하는 대신 객체의 속성을 수정합니다.

이 응용 프로그램이 실행 중일 때 CPU 그래프를 보면 CPU의 한 부분 (100 %에서 한 번에 하나의 코어) 만 사용한다는 것이 분명하므로 병렬로 실행하면 실행 시간을 줄일 수 있다고 생각합니다 .

나는 병렬 프로그래밍에 익숙하다. 그래서 어떤 도움을 주시면 감사하겠습니다.

+0

이러한 XML 파일을 단일 개체 모델로 구문 분석하면 해당 파일이 메모리에로드된다는 것을 의미합니까? 그렇다면이 객체 모델로 다음에 무엇을 할 것입니까? 일부 연산/변환을 수행하지 않고 다른 곳에서 저장하는 것이 아니라면 메모리에 무언가를로드하는 것은 거의 유용하지 않습니다. –

+0

@darin 구문 분석 후에 추가 프로세스가있게됩니다. 그러나 그것은이 질문의 맥락에서 아닙니다. –

답변

0

나는 당신에게 다음과 같은 방법을 제안 : 처리 기다릴 객체의 대기열을 구성하고 여러 스레드에서 그들을 큐에서 :

  1. 는 XmlReader를 작성하지 EOF 동안 노드에서 파일 노드를 읽기 시작합니다.
  2. 닫는 태그를 만나면 내용을 객체로 직렬화 할 수 있습니다.
  3. 직렬화 된 개체를 큐에 넣습니다.
  4. 대기열에있는 객체의 수를 확인하고 N보다 크면 스레드 풀에서 < = N 개의 객체를 대기열에서 제거하고 처리하는 새 스레드를 시작합니다.

여러 스레드에서 객체를 대기열에 포함시키고 대기열에서 제외시키기 때문에 대기열에 대한 액세스가 동기화되어야합니다.

어려움은 모든 CPU 코어가 동시에 작동하도록 N을 찾는 것입니다.

0

병렬 프로그래밍 대신 스레드를 사용하는 것이 좋습니다. 대신 (어려운 작업이 될 수있는) 자신을 스레딩 관리에 노력

Threading Tutorial

+0

및 공유 메모리, 의심의 여지가 없습니다. – Alex

+1

스레드는 병렬 프로그래밍을 수행하는 한 가지 방법입니다. –

0

, 내가 병렬 라이브러리를 사용하는 것이 좋습니다. .Net이 들어오는 것에 대해서는 PLINQ/TPL을보십시오. CTP는 here에서 다운로드 할 수 있습니다.