我需要通过代理下载很多页面。构建多线程网络爬虫的最佳实践是什么?
Parallel.For\Foreach 是足够好还是更适合繁重的 CPU 任务?
你对下面的代码有什么看法?
var multyProxy = new MultyProxy();
multyProxy.LoadProxyList();
Task[] taskArray = new Task[1000];
for(int i = 0; i < taskArray.Length; i++)
{
taskArray[i] = new Task( (obj) =>
{
multyProxy.GetPage((string)obj);
},
(object)"http://google.com"
);
taskArray[i].Start();
}
Task.WaitAll(taskArray);
它的工作很糟糕。它非常慢,我不知道为什么。
这段代码也不好用。
System.Threading.Tasks.Parallel.For(0,1000, new System.Threading.Tasks.ParallelOptions(){MaxDegreeOfParallelism=30},loop =>
{
multyProxy.GetPage("http://google.com");
}
);
好吧,我认为我做错了什么。
当我启动我的脚本时,它仅以 2%-4% 使用网络。