我请求了100页,但全部都是404。我写了:
{
var s = DateTime.Now;
for(int i=0; i < 100;i++)
DL.CheckExist("http://google.com/lol" + i.ToString() + ".jpg");
var e = DateTime.Now;
var d = e-s;
d=d;
Console.WriteLine(d);
}
static public bool CheckExist(string url)
{
HttpWebRequest wreq = null;
HttpWebResponse wresp = null;
bool ret = false;
try
{
wreq = (HttpWebRequest)WebRequest.Create(url);
wreq.KeepAlive = true;
wreq.Method = "HEAD";
wresp = (HttpWebResponse)wreq.GetResponse();
ret = true;
}
catch (System.Net.WebException)
{
}
finally
{
if (wresp != null)
wresp.Close();
}
return ret;
}
运行两次得出所需时间分别为00:00:30.7968750和00:00:26.8750000。然后我尝试了Firefox,并使用以下代码:
<html>
<body>
<script type="text/javascript">
for(var i=0; i<100; i++)
document.write("<img src=http://google.com/lol" + i + ".jpg><br>");
</script>
</body>
</html>
使用我的补休时间,大约需要4秒钟。4秒钟比我的应用程序快6.5-7.5倍。我计划扫描数千个文件,因此需要3.75小时而不是30分钟将是一个大问题。如何让这段代码更快?我知道有人会说Firefox缓存了图片,但我想说:1)它仍然需要检查来自远程服务器的标头以查看是否已更新(这正是我希望我的应用程序执行的)2)我没有收到正文,我的代码应该只请求标头。那么,我该怎么解决这个问题呢?
ServicePointManager.Expect100Continue = false;
https://msdn.microsoft.com/zh-cn/library/system.net.servicepointmanager.expect100continue(v=vs.110).aspx默认情况下,在每次查询之前都会发送一个Continue 100状态。通过禁用此功能,可以加快请求的速度。 - juFo