C# HtmlAgility Pack并行化与Winforms HtmlDocument速度

C# HtmlAgility Pack并行化与Winforms HtmlDocument速度,c#,webbrowser-control,html-agility-pack,dom,C#,Webbrowser Control,Html Agility Pack,Dom,我有一个计划,我正试图尽快开始工作。这个程序加载了许多不同的网站,并对它们执行一些刮削 我曾经使用Forms.HtmlDocument执行抓取(我基本上通过使用WebRequests下载它,然后使用WebBrowser控件将它推送到文档中)-但是,这不可能完全并行,因为当WebBrowser不是主线程时,无法强制WebBrowser进行更新 所以我决定尝试HtmlAgilityPack,我想也许我可以并行使用它。然而,随后我读到了以下帖子: 这表明它的平行性不是很好 转换所有的代码将需要一些时

我有一个计划,我正试图尽快开始工作。这个程序加载了许多不同的网站,并对它们执行一些刮削

我曾经使用Forms.HtmlDocument执行抓取(我基本上通过使用WebRequests下载它,然后使用WebBrowser控件将它推送到文档中)-但是,这不可能完全并行,因为当WebBrowser不是主线程时,无法强制WebBrowser进行更新

所以我决定尝试HtmlAgilityPack,我想也许我可以并行使用它。然而,随后我读到了以下帖子:

这表明它的平行性不是很好

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

任何其他想法都会被考虑。谢谢


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

就我的情况而言,htmlagilitypack工作得很好。一个大问题是RFC合规性,当您创建运行速度尽可能快的srapping应用程序时,应该考虑到这一点

1) 将此添加到主方法的末尾

System.Net.ServicePointManager.DefaultConnectionLimit = 100;

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

我认为“普通多线程库”是指启动线程,而不是系统。并行?Yeap启动线程可以提供更多的控件。虽然我还没有深入了解细节,但TPL已经过优化,可以创建尽可能多的处理器支持的线程。相反,在这种情况下,并行化应用程序的原因不是使处理器饱和,而是并行地建立许多http连接。