这适用于 ASP.NET。我想改进运行我的功能所花费的时间,今天大约需要 20-30 秒,但更多的是 30 秒而不是 20 秒。它在一个线程上运行,发出 20 个网络请求。
我正在考虑执行所有 20 个 webreqeusts 的线程,以便快速找到结果或只是浏览数据(IE 执行所有 20 个请求,但没有找到任何东西)。
这是它的工作原理。
1. 我正在使用 html 敏捷包来获取 htmldocuments。
2. 然后我解析它们以获取信息
3. 最后我将该信息添加到字典中,或者我继续下一个 webrequest,直到达到 20 个请求。
我最多发出 20 个 webRequest,至少 1 个。我已将功能设置为在找到我正在搜索的信息时结束。有时信息不存在,因此有 20 个网络请求(它遍历所有数据)。
每个 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;
}
}
}