0

我有一个程序,我正试图尽快开始工作。该程序加载许多不同的网站并对其进行一些抓取。

我曾经使用 Forms.HtmlDocument 执行抓取(我基本上是使用 WebRequests 下载它,然后使用 WebBrowser 控件将其推送到文档中) - 但是由于无法强制 WebBrowser当它不是主线程时更新。

所以我决定尝试 HtmlAgilityPack,想也许我可以把它并行化。但是后来我阅读了以下帖子:

如何使用 Parallel.For/ForEach 获得最大性能?(包括表演时间)

这表明它并不能很好地并行化。

转换所有代码需要一些时间(由于怪癖和这一切的复杂性) - 但是我想知道它是否值得。如果我避免使用 WebGet(而是使用 WebRequest 获取流并将其推送到 AgilityPack 中)——这会给我带来有用的性能提升吗?目前,每次迭代大约需要 19 秒,大部分时间都在等待页面下载。

将考虑任何其他想法。谢谢。

编辑:当我们在这里时,使用这两种方法是否会提高速度(即使在单线程环境中?)

4

1 回答 1

1

就我而言,htmlagilitypack 运行良好。一个大问题是 RFC 合规性,当您创建运行速度尽可能快的应用程序时应该覆盖它。

1)在你的主要方法的开头添加这个

System.Net.ServicePointManager.DefaultConnectionLimit = 100;

2)与普通的多线程库而不是 tpl 并行化。

于 2012-05-21T13:01:53.030 回答