【发布时间】:2026-01-03 18:30:01
【问题描述】:
我有一个程序,我正试图尽快开始工作。该程序会加载许多不同的网站并对它们进行一些抓取。
我曾经使用 Forms.HtmlDocument 执行抓取(我基本上是使用 WebRequests 下载它,然后使用 WebBrowser 控件将其推送到文档中) - 但是由于无法强制执行,因此不可能干净地并行化当它不是主线程时要更新的 WebBrowser。
所以我决定尝试 HtmlAgilityPack,认为也许我可以并行化它。但是后来我阅读了以下帖子:
How to get max performance using Parallel.For/ForEach? (performance timings included)
这表明它并不能很好地并行化。
转换所有代码需要一些时间(由于怪癖和这一切的复杂性) - 但是我想知道它是否值得。如果我避免使用 WebGet(而是使用 WebRequest 获取流并将其推送到 AgilityPack) - 这会给我带来有用的性能提升吗?目前每次迭代大约需要 19 秒,大部分时间都在等待页面下载。
将考虑任何其他想法。谢谢。
编辑:当我们在这里时,使用这两种方法是否会提高速度(即使在单线程环境中?)
【问题讨论】:
标签: c# webbrowser-control html-agility-pack dom