2014-01-24 4 views
1

파일 컬렉션이 있으며이를 병렬로 처리해야합니다. 처리에는 최종 단계로 각 파일을 FTP 서버에 업로드하는 작업이 포함됩니다. Parallel.ForEach, 동시 연결을 제한하십시오.

Parallel.ForEach(files, options, ProcessFile); 

가 나는 초과하지 않을 것이다 Parallel.ForEach

ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 2 }; 

에 전달하여 보장합니까 : 해당 서버의 동시 연결의 수는이 같은 Parallel.Foreach()를 사용하여 2로,의 말을하자, 제한된다 허용 된 연결 수? Parallel.ForEach의 작동 방식에 대해 많은 내용을 읽었지만 여전히 확실하지 않습니다. 내가 FTP 서버의 유일한 사용자이고 모든 연결이 ProcessFile 동안 제대로 닫힌 경우를 생각해 봅니다.

+0

연결 제한 : 총 * 연결 수는 얼마입니까? 또는 "호출 노드 당"연결입니까? 전자의 경우, 다른 곳에서는 실행되지 않는 것이 확실해야합니다. 후자의 경우에도이 작업 *을 한 번에 두 번 응용 프로그램에서 수행 할 수 있는지 여부를 알아야합니다. –

+0

@MarcGravell Total. 각 통화는 파일이 업로드 된 후 새 연결을 열고 닫습니다. –

+0

내 포인트 ("전체") : 귀하의 응용 프로그램이 하나의 노드에서만 실행되고 있다는 것을 알고 계십니까? –

답변

2

예, 그렇게하면 최대 두 개의 작업을 동시에 실행할 수 있습니다. 다른 프로세스 나 작업이 해당 서버에 대한 업로드를 수행하고 있다고 가정하지 않으면 정상이어야합니다.

foreach 루프 내부에서 세마포어를 사용하는 것이 좋습니다. 실제 처리는 동시에 두 개 이상의 작업을 수행 할 수 있기 때문입니다. 처리가 대부분의 시간이 걸리는 부분 인 경우 성능이 향상됩니다.

+0

나는 정확하게 이런 식으로하고있다. 처리의 모든 단계는 병렬로 실행되지만, 업로드 할 때는 세마포어를 사용합니다. –