临走时候(将近5:00),领导让弄一个东西,判断图片是否存在,如存在,调用小图,不存在调用大图。用下面的方法。轻松"搞定"......
private bool UrlIsExist(String url)
{
System.Uri u = null;
try
{
u = new Uri(url);
}
catch { return false; }
bool isExist = false;
System.Net.HttpWebRequest r = System.Net.HttpWebRequest.Create(u)
as System.Net.HttpWebRequest;
r.Method = "HEAD";
try
{
System.Net.HttpWebResponse s = r.GetResponse() as System.Net.HttpWebResponse;
if (s.StatusCode == System.Net.HttpStatusCode.OK)
{
isExist = true;
}
}
catch (System.Net.WebException x)
{
try
{
isExist = ((x.Response as System.Net.HttpWebResponse).StatusCode !=
System.Net.HttpStatusCode.NotFound);
}
catch { isExist = (x.Status == System.Net.WebExceptionStatus.Success); }
}
return isExist;
}
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10; i++)
{
bool result = UrlIsExist("http://XXX/Case/small/pt201271011214893877.jpg");
}
sw.Stop();
Response.Write(sw.ElapsedMilliseconds);
写了一个程序,判断了时间,363毫秒!
今天早上,来了一看。发现发布到外网上面,页面打开如此缓慢。我想,肯定是这个请求的方法出问题了。
写了一个正确的链接,和错误的链接测试了一下。发现问题挺严重过的。发到服务器上面请求的时间是如此的长。好几分钟依然不见反应。
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10; i++)
{
bool result = UrlIsExist("http://XXX/Case/small/bj2012071691344.jpg");
}
sw.Stop();
Response.Write("成功sw:" + sw.ElapsedMilliseconds+"<br/>");
Stopwatch sw2 = new Stopwatch();
sw2.Start();
for (int i = 0; i < 10; i++)
{
bool result = UrlIsExist("http://XXX/Case/small/bj20120716913441.jpg");
}
sw2.Stop();
Response.Write("成功sw2:" + sw2.ElapsedMilliseconds);
IE底部一直显示,正在打开网页的状态......
程序是没有问题的,在本地测试的速度贼快:
成功sw:264
成功sw2:143
服务器上结果是:
成功sw:19
成功sw2:1000317
平均了一下,一个连接请求需要1.6分钟。太慢了,我一个列表页,10条记录加载进来需要16分钟。这种方式是不能够让人采用的。
可见,在服务器上,创建请求时,是很耗资源的。效率也比较低。