2011-12-17 24 views
0

這裏掛的應用是vb.net 2008代碼:我的網址檢查功能在vb.net

Public Function CheckURL(ByVal URL As String) As Boolean 
Try 
Dim Response As Net.WebResponse = Nothing 
Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL) 
Response = WebReq.GetResponse 
Response.Close() 
Return True 
Catch ex As Exception 
End Try 
End Function 

當URL被處理檢查它掛了一段時間我的應用程序。這可能會檢查一切順利的URL列表不掛我的應用程序..

是否有任何其他查詢網址最快的方法?

注意:我有大約800個URL在文件中檢查所有鏈接有效的網站響應與否。

回答

0

答案是雙重的:

  1. 大多數的等待時間是由於下載不需要的內容。如果您只請求返回標題,則您將收到的數據量少得多,這會使您的過程更快。
  2. 正如Matt所認定的那樣,您並未處理您的連接,這可能會延緩您的流程。

擴展在馬特的回答,請執行下列操作:

Try 
    Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL) 
    WebReq.Method = "HEAD" 'This is the important line. 
    Using Response = WebReq.GetResponse() 
     Return True 
    End Using 
Catch ex as WebException 
    Return False 
End Try 
2

如果發生異常,則WebResponse對象沒有正確地處置。這可能會導致您的應用程序用完連接。像這樣的東西會更好地工作:

Try 
    Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL) 
    Using Response = WebReq.GetResponse() 
     Return True 
    End Using 
Catch ex as WebException 
    Return False 
End Try 

此使用Using關鍵字確保響應被關閉並最終確定每當塊退出。

如果服務器本身需要一段時間來響應,請查看HttpWebRequest上的BeginGetResponse方法。請查詢MSDN瞭解如何使用它的示例。但是要警告,如果你不小心,這種方式也是瘋狂的。

+0

我偷你的答案來改善它。當只需要標題時,他/她正在下載內容正文。 – 2011-12-17 08:21:43

+0

謝謝Matt Sieker提供代碼的基本概念。 – Shahrukh 2011-12-17 09:02:40

0

GetResponse爲您提供整個內容以滿足您的要求。如果這是你想要的,那麼在客戶端沒有太多的空間來加速請求,因爲它主要取決於URL服務器有多快的回覆以及多少數據將被髮送。如果你只是想檢查URL是否有效(或者根本沒有響應),那麼只需要ping它就可能會更好。

記住GetResponse當它遇到錯誤時沒有設置,所以使用作者:Matt代碼來避免這種情況。

對於您的其他問題,掛起應用程序,您可能會避免將此代碼作爲線程運行。

這個工作基本上是這樣(從here):

rem at the top of the code 
Imports System.Threading 

... 

rem your event handler, p.e. button click or whatever 
trd = New Thread(AddressOf ThreadTask) 
trd.IsBackground = True 
trd.Start() 

rem your code 
Private Sub ThreadTask() 
    dim i as long 

    Do 
     i += 1 
     Thread.Sleep(100) 
    Loop 
End Sub