1
我剛剛將我的網站請求異步,之前那張約三倍的速度,但我發現了一個缺陷。讓我解釋一下,我對頁面使用了20個不同的請求。當頁面加載時,我解析結果,並將它們添加到字典中,完成後,我檢查字典中是否有關鍵字。我提供了一個關於信息被發現與否的信息。ASP.NET加快結果的處理從異步請求
現在異步運行前的所有20請求時,這花費了大約30秒。今天,我在7秒左右的時間裏運行了20個請求,很棒的改進,但是......如果舊的方法在第一個請求中找到了信息,它會在2秒內完成。使用這種方法總是需要7秒。
我應該怎麼做,一切的終點權當信息被發現的?而不是做所有二十個請求。這是代碼。
編輯我試圖刪除了WaitAll,但是這給了我表現更差。
public decimal GetWebpage(string urltovisit, string visitorurl, string information)
{
List<HtmlDocument> htmllist = new List<HtmlDocument>();
System.Net.ServicePointManager.DefaultConnectionLimit = 10;
FetchPageDelegate del = new FetchPageDelegate(FetchPage);
List<IAsyncResult> results = new List<IAsyncResult>();
List<WaitHandle> waitHandles = new List<WaitHandle>();
_visitorUrl = visitorurl;
_theSearchedinformation = information;
for (int i = 0; i < 200; i += 10)
{
string url = urltovisit + i;
IAsyncResult result = del.BeginInvoke(url, null, null);
results.Add(result);
waitHandles.Add(result.AsyncWaitHandle);
}
WaitHandle.WaitAll(waitHandles.ToArray());
foreach (IAsyncResult async in results)
{
FetchPageDelegate pagedelagate = (async as AsyncResult).AsyncDelegate as FetchPageDelegate;
//THIS FUNCTION PARSES AND ADDS THE RESULT TO A DICTIONARY
DocParser.StartParse(pagedelagate.EndInvoke(async));
if (GetPostion() != 201)
{ //ADD DATA TO DATABASE
InsertRankingData(DocParser.GetSearchResults(), _theSearchedinformation);
return GetPostion();
}
}
return 201;
}
所以我應該創建delagates的一個新的列表來運行分析,並添加到字典中的方法和類的?或者我可以使用等待句柄來判斷結果是否已找到?我在這裏真的很無能?