测试下载网页源代码的不同可能性我得到了以下结果(以毫秒为单位的平均时间到 google.com、9gag.com):
- 普通 HttpWebRequest:169、360
- Gzip HttpWebRequest:143、260
- WebClient 获取流: 132、295
- WebClient 下载字符串:143、389
因此,对于我的 9gag 客户端,我决定采用 gzip HttpWebRequest。问题是,在我的实际程序中实现后,请求花费了两倍以上的时间。
仅在两个请求之间添加 Thread.Sleep 时也会出现问题。
编辑:
只是稍微改进了代码,仍然是同样的问题:在循环中运行时,当我在请求之间添加延迟时,请求需要更长的时间
for(int i = 0; i < 100; i++)
{
getWebsite("http://9gag.com/");
}
每个请求大约需要 250 毫秒。
for(int i = 0; i < 100; i++)
{
getWebsite("http://9gag.com/");
Thread.Sleep(1000);
}
每个请求大约需要 610 毫秒。
private string getWebsite(string Url)
{
Stopwatch stopwatch = Stopwatch.StartNew();
HttpWebRequest http = (HttpWebRequest)WebRequest.Create(Url);
http.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
string html = string.Empty;
using (HttpWebResponse webResponse = (HttpWebResponse)http.GetResponse())
using (Stream responseStream = webResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream))
{
html = reader.ReadToEnd();
}
Debug.WriteLine(stopwatch.ElapsedMilliseconds);
return html;
}
有什么想法可以解决这个问题吗?