プロキシ経由で多くのページをダウンロードする必要があります。マルチスレッド Web クローラーを構築するためのベスト プラクティスは何ですか?
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% しか使用されません。