2011-10-14 14 views
0

我有一個項目是關於爬行ae商業網站,其中有近15000的產品,我無法計數,但近25萬頁。我用c#寫了一個程序,使用多線程,總共我用了20個線程。但是當我只用了5個線程時沒有高性能。我錯了?抓取時不能增加它?可以在一小時內使用多線程在c#編程中使用sql server來檢索多少頁?

我測試我抓取500頁,並採取他們的HTML十分貝minus。這是正常的嗎?或者我可以增加它?

此外,SQL服務器可以用於20個線程併發插入,更新操作,但是當我將該線程數增加到100個線程時,我會遇到問題嗎?

我計算完全現場過程將需要5小時10線程。我需要幫助降低這一時期..或者是正常的..我不希望使用更多的電腦...

我PC細節是2 GB RAM,1.87 GHz的英特爾T2130 ...


我檢查了我的CPU是90%,我爬從互聯網網站,我的內存是75%,並且每個第二程序運行時,我每秒需要70 kb。如何提高抓取速度?

+0

太多的變量可以可靠地回答這個問題。 WebRequests僅限於(我認爲)每個域6個併發。可能是一個開始的好地方。 – spender

回答

1

您是否通過互聯網爬行該網站?如果是這樣,你的互聯網連接速度有多快。檢查你的任務管理器。如果你的CPU最大化,你需要獲得一個更快的機器或者使你的算法更有效地解析頁面。如果你的CPU沒有做任何事你可能需要更快的連接。此外,如果您通過互聯網抓取網站,我認爲有1個域限制的最大請求數量(我認爲)默認設置爲2,但這可以更改。此外,請確保如果這不是您的網站,請遵守robots.txt文件,以確保它們不會阻止您。由於他們檢測到的流量很大,網站本身可能會阻止你。

0

增加邏輯核心數以上的線程數並沒有多大意義。如果4個線程正在工作,而其他96個正在排隊,則不會看到任何好處。

此外,您應該配置文件以查看實際瓶頸的位置。如果每個頁面上處理的數據很少,則網絡延遲可能不僅僅是原始處理。分析也可能表明您的算法需要改進。

所以忘記了無限期地增加你的線程和配置文件。例如,EQATEC提供了一個免費的.NET分析器。

2

那麼,你挑戰的最大問題不是你的環境,而是另一個網站會阻止你,如果你要爬得太快。

如果你的sql server不支持,你可以隨時將html文件寫入文件,然後按照你自己的步調將它導入到數據庫中。這也讓您可以選擇更改您的抓取代碼,如果它發現HTML已經改變。

強烈的建議:不要以高速運轉,這會讓其他網站陷入困境。

相關問題