【发布时间】:2013-05-14 17:43:35
【问题描述】:
我正在制作一个“网络解析器”,但它仅适用于 1 个网站,它将同时解析许多不同的页面。
目前,我可能需要以相对较快的方式解析 300,000 个页面(我只抓取少量不需要太长时间的信息,每个页面大约需要 3 秒在我的网络上最大)。当然,900,000 秒到天 = 10 天,这是很糟糕的表现。我想最多将其减少到几个小时,我对请求数量的时间是合理的,但它仍然需要“快速”。我也知道我不能一次只做 300,000 次,否则网站会阻止我的所有请求,因此每个请求之间必须有几秒钟的延迟。
我目前在单个 foreach 循环中处理它,没有像以往那样利用任何多线程,但我知道我可以利用它,我不确定我应该采取什么路径是否是线程池,或其他类型的线程系统或设计。
基本上,我正在寻找使用多线程来为我指出正确的效率方向的人,以便我可以减少解析那么多页面所需的时间,某种系统或线程结构。
谢谢
【问题讨论】:
-
您知道所有 300,000 个链接一开始就知道,还是在您进行操作时发现它们?
-
查看更高级别的 .NET 多线程概念,例如
async和任务并行库。 -
@jon - 我知道所有 300,000 个链接一开始,所以它不是一个真正的爬虫,只是一个解析器。
-
听起来
Parallel.ForEach是你的朋友。您应该了解您的网站准备处理的流量。
标签: c# multithreading