HtmlAgility Pack并行化VS Winforms HtmlDocument Speed

时间:2012-05-21 12:29:15

标签: c# webbrowser-control html-agility-pack dom

我有一个程序,我想尽快开始工作。该程序加载了许多不同的网站,并对它们进行了一些抓取。

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

所以我决定尝试HtmlAgilityPack,认为也许我可以对此进行兼容。然而,我读了以下帖子:

How to get max performance using Parallel.For/ForEach? (performance timings included)

这表明它并没有很好地兼容。

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

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

编辑:当我们在这里时,使用任何一种方法(即使在单线程环境中)都会有任何速度提升吗?

1 个答案:

答案 0 :(得分:1)

对于我的情况,htmlagilitypack工作得非常好。一个重要的问题是当您创建尽可能快的包装应用程序时,RFC合规性应该是overiden。

1)在主方法的开始时添加它

System.Net.ServicePointManager.DefaultConnectionLimit = 100;

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