2012-05-21 44 views
0

我有一個程序,我試圖儘可能快地工作。這個程序加載了許多不同的網站,並對它們進行了一些修改。HtmlAgility Pack Parallelisation VS Winforms HtmlDocument速度

我曾經通過使用Forms.HtmlDocument(我基本下載它通過使用WebRequests,然後使用WebBrowser控件將它推入文檔)執行刮取 - 但是,這是不可能的,因爲無法強制WebBrowser在其不是主線程時更新。

所以我決定嘗試一下HtmlAgilityPack,認爲或許我可以平行一點。但是後來我看了下面的帖子:

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

這表明它並沒有真正paralelise很好。

轉換所有的代碼需要一些時間(由於它的怪癖和複雜性) - 但是我想知道它是否值得。如果我避免使用WebGet(而是使用WebRequest獲取流並將其推入到AgilityPack中) - 是否會提高性能?目前,每次迭代大約需要19秒,大部分時間都花在等待頁面下載上。

任何其他的想法將被考慮。謝謝。

編輯:雖然我們在這裏,有沒有使用任何一種方法的任何速度增加

回答

1

我的情況htmlagilitypack是工作得很好(甚至在單線程環境?)。一個很大的問題是,當您創建儘可能快速運行的分段應用程序時,RFC合規應該被忽略。

1)在你的主要方法

System.Net.ServicePointManager.DefaultConnectionLimit = 100; 

2)與正常的多線程庫和並行化TPL沒有的beggining添加此。

+0

「正常的多線程庫」我假設你的意思是開始線程而不是System.Parallel? – Aabela

+0

Yeap開始的線程給你更多的控制。雖然我沒有深入細節,但TPL針對創建儘可能多的線程進行了優化,因爲您的處理器可以支持這些線程。相反,在這種情況下並行化應用程序的原因不是爲了使處理器飽和,而是爲了並行創建多個http連接。 – Lakis