2013-03-22 1 views
1

Workflow를 사용하여 ParallelForEach를 사용하여 병렬 AsyncCodeActivities를 실행하고 있습니다. 그 동안 코드의 실행 중에 많은 액티비티 (1000 개의 비동기 액티비티)가 발생하면 System.OutOfMemory 예외가 발생합니다.AsyncCodeActivity의 EndExecute 활동이 너무 많으면 Worfklow가 호출되지 않습니다.

내 코드를 디버깅하여 더 자세히 조사했을 때 프로세스가 완료 되었더라도 일련의 비동기 코드 활동에 대해 내 "EndExecute"메소드가 호출되지 않는 것으로 나타났습니다. 이로 인해 메모리가 끊임없이 스택에 저장되지 않고 마침내 System.OutOfMemory 예외가 발생합니다. 스레드 수를 8 (내 컴퓨터의 프로세서 수)로 줄이려고했지만 예외적 인 경우도 있습니다.

친절하게 도와주세요. 그리고 일주일 이상이 문제로 고생하고 있습니다. 나는 다른 곳에서 해결책을 찾을 수 없었다.

답변

0

.NET Framework 4.0을 사용하는 경우 SetMaxThreads()를 호출하여 최대 스레드 풀 크기를 제한함으로써보다 적은 수로 도움이 될 것으로 생각합니다. GetMaxThread()를 호출하여 기본 최대 스레드 크기를 가져올 수 있습니다.

현재 메모리가 사용 가능할 때까지 런타임에서 스레드 풀 스레드를 계속 할당하므로 OutOfMemory 예외가 발생합니다.

각 활동에 필요한 메모리에 따라이 수를 조정해야 할 수도 있습니다.

관련 문제