我需要刮网站时是否应该使用BackgroundWorker或Threads?

时间:2009-09-09 01:56:14

标签: c# multithreading backgroundworker

我打算在博彩网站上搜索一些数据。我希望能够发送多个请求,这样我就可以一次屏幕抓取几个页面。我已经通过电子邮件向网站管理员发送了电子邮件,并获得了适当的速度(每秒几个请求)。

据我所知,BackgroundWorker使用了我认为合适的线程池 将BackgroundWorker用于此用例或使用实际的线程是否有意义?

2 个答案:

答案 0 :(得分:5)

还有另一种被称为ThreadPool的结构。使用它可能是值得的,因为它将为您管理多个线程,您可以控制最小/最大线程数。 BackgroundWorker仅限于一个线程,最适用于具有后台I / O并且不想锁定用户界面线程的WinForms应用程序。

您需要保留一个页面队列来抓取并将这些页面提供给线程池。您可能仍希望暂停或限制线程以获得预期的抓取级别。我个人会将检索到的页面内容的解析与通过HTTP实际检索页面分开。这通常会使事情更容易维护,您可能不需要本地处理是多线程的。

答案 1 :(得分:2)

BackgroundWorker的典型用法是保持UI响应;相反,使用线程池对多个http请求/响应进行排队。

请参阅ThreadPool.QueueUserWorkItem