2017-05-15 3 views
-5

안녕하세요, 나는 개체의 큰 목록에서 정보를 얻으려고합니다. 내가 여러 목록에서 정보를 하나 개의 목록에이 정보를 추가 할 수있는 방법병렬 작업 목록에 새 항목을 추가하는 방법

List<Foo> Information = new List<Foo>(); 
List<string> SubPaths = getPaths(); //about 10000 
var SplittedList = splitList(SubPaths, 100); //100 list of 100 (100*100=10000) 

foreach(var list in SplittedList) 
{ 
    List<Foo> ProcessedList = DoSomethingWithParallelTasks(list); 
    Information.AddRange(ProcessedList); //when one of all task finished 
} 

Int number = Information.Count()//test: number = 10000 

: 이것은 내 코드입니다.

정상적인 방법으로 목록을 처리하는 경우 1 시간 이상 걸립니다. @ 마크 Baijens

List<Foo> Information = new List<Foo>(); 
    List<string> SubPaths = getPaths(); //about 10000 
     foreach(var path in SubPaths) { 

Information.Add(DoSomethingWithoutParallelTask(path); 

     } 

그것은 시간

감사보다 더 걸립니다.

+0

질문이 명확하지 않습니다. Foo의 한 목록에 문자열 목록을 넣으 려하므로 문자열을 Foo로 변환해야합니다. 그리고 당신은 이것을 병렬로하고 싶으므로 멀티가 뒤죽박죽입니까? –

+0

정상적인 방법으로 목록을 처리하는 데 1 시간 이상 걸립니다. '리스트 정보 = 새리스트 (); 목록 SubPaths = getPaths(); // 약 10000 foreach는 (하위 경로에서 VAR 경로) { Information.Add (DoSomethingWithoutParallelTask ​​(경로) 은}'이 –

+0

아직도 확실하지 무슨 뜻인지 시간 이상 소요,하지만 난 당신이 보길 원하는 것 같아요 평행 한 foreach 함수 (멀티 스레딩). 당신이하고있는 일을 모르는 경우에는 다중 밟기가 복잡한 문제로 이어질 수 있기 때문에 조심하십시오. 더 많은 연구를 할 필요가 없습니다. –

답변

1

나는 이런 식으로하고 싶다고 생각합니다. 멀티 밟는 것에 대해서는 그다지 잘 모릅니다. 따라서 라이브 환경에서 구현하기 전에 더 많은 연구를 해보는 것이 좋습니다. 멀티 밟기는 잘못된 방식으로 프로그래밍 된 경우 신뢰할 수없는 코드로 이어질 수 있기 때문입니다.

Parallel.ForEach(SubPaths, (currentPath) => { 
    Information.Add(DoSomethingWithoutParallelTask(currentPath); 
}); 
관련 문제