這是針對ASP.NET的。我想提高運行我的功能所需的時間,今天大約需要20-30秒,而對於30secs則要比20秒多。這是在一個線程上運行20個webrequests。使用線程優化一組20個web請求
我在想,做所有的20個webreqeusts線程,以便快速查找的結果,或只是經過數據(即做所有的20個請求沒有找到任何東西)。
下面是它的工作原理。
1.我使用html敏捷包來獲取htmldocuments。
2.然後我解析這些信息
3.最後我補充一點信息字典或我移動到下一個WebRequest的,直到我達到20個請求。
我讓最多20個webRequests,最低1。我已經設置,當我搜索的信息中找到結束該功能。有時信息並不存在,因此有20個webrequests(它貫穿所有數據)。
每個webrequest都會在字典中添加5-20個條目。然後將它與我發送給它的信息進行比較,如果它在列表中,我將密鑰返回,否則返回201.如果發現它被添加到數據庫。
質詢
* A:*如果我想與線程做到這一點,多少應該創建? 20每個請求一個,並讓他們都鬆動做這項工作?或者我應該創造像他們4最多5個請求每個?
B:如果兩個線程在同一時間完成,並希望信息添加到目錄中,可以將其鎖定整個網站(我使用ASP.NET),還是會嘗試添加一個從線程A然後從線程B得到一個結果?我今天已經有一個檢查,在添加密鑰之前檢查密鑰是否存在。
C:什麼是最快的方式呢?
這是我的代碼,描繪環路只是表明,20個發送請求的?
public void FetchAndParseAllPages()
{
int _maxSearchDepth = 200;
int _searchIncrement = 10;
PageFetcher fetcher = new PageFetcher();
for (int i = 0; i < _maxSearchDepth; i += _searchIncrement)
{
string keywordNsearch = _keyword + i;
ParseHtmldocuments(fetcher.GetWebpage(keywordNsearch));
if (GetPostion() != 201)
{ //ADD DATA TO DATABASE
InsertRankingData(DocParser.GetSearchResults(), _theSearchedKeyword);
return;
}
}
}
好像異步PreRequestHandler方法是最好的嗎?但我並沒有真正考慮過這個問題,你有沒有例子?我可以將該解決方案用於我的應用程序嗎請記住,我使用htmlweb.PreRequest = new HtmlAgilityPack.HtmlWeb.PreRequestHandler(OnPreRequest);當我連接到獲取網頁。「 – 8bitcat
」爲您處理「多少線程」。「這僅適用於CPU綁定的工作。對於IO界限的工作,啓發式會出現災難性的錯誤。 – usr