나는 C#에서 무거운 웹 스크래퍼를 쓰고있다. 나는 그것이 빠르고 신뢰할 수 있기를 바랍니다. Parallel.Foreach 및 Parallel.For가 너무 느립니다. 입력의 경우 URL 목록을 사용하고 있습니다. 정확히 같은 시간에 작업하는 스레드를 최대 300 개 갖고 싶습니다 (내 CPU 및 네트워크 연결이이를 처리 할 수 있음). 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이 작업을 사용하면 더 잘 작동합니까? 때로는 스레드가 명백한 이유없이 끝나고 일부 결과가 저장되지 않는 경우가 있습니다. 나는 이것을 더 믿을만한 방법으로 원한다. 어떤 아이디어? 더 단단한 큐 유형의 스크래핑을 원합니다. 내가 (모든 코드가 있지만, 중요한 부분)를 내놓았다 무엇 :C에서 병렬화에 대한 몇 가지 질문 #
List <string> input = // read text file
int total = words.Length;
int maxThreads = 300;
while (true)
{
if (activeThreads < maxThreads)
{
current++;
Thread thread = new Thread(() => CrawlWebsite(words[current]));
thread.Start();
}
}
public static void CrawlWebsite(string word)
{
activeThreads++;
// scraping part
activeThreads--;
}
activeThreads가 보호되지 않아서 경주 할 것입니다. 정황. –
두 개의 '병렬'방법이 너무 느리다는 것을 어떻게 결정 했습니까? –
@ John Saunders 필자는 내 자신의 예제와 Parallel을 시도했다. 결과를 비교했다. Parallel.Foreach는 MaxDegreeOfParallelism을 더 높은 숫자로 설정하는 경우에도 2 개의 스레드 만 실행합니다. – bbrez1