C#判斷網路地址 Url 是否存在的方法
阿新 • • 發佈:2019-01-31
臨走時候(將近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分鐘。這種方式是不能夠讓人採用的。
可見,在伺服器上,建立請求時,是很耗資源的。效率也比較低。