1. 程式人生 > >C#判斷網路地址 Url 是否存在的方法

C#判斷網路地址 Url 是否存在的方法

臨走時候(將近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分鐘。這種方式是不能夠讓人採用的。

可見,在伺服器上,建立請求時,是很耗資源的。效率也比較低。