使用HttpWebRequest或类似方法扫描数百个网站

时间:2012-09-12 18:12:34

标签: vb.net multithreading httpwebrequest webrequest pooling

我有HttpWebRequest的VB代码,它收集了数百个网站的html,但需要很长时间才能完成任务。代码基本上是for-to-loop并读取列表框中每个网站的html。在循环中,搜索每个网站的提取的html以查找特定单词。我想显示每个单词栏下有单词的网站列表。

 For Each webAddr As String In lstbox.Items

        strHtml = Make_A_Call(webAddr)

        If strHtml.Contains("Keyword1") Then
            ..........
        End If
        If strHtml.Contains("Keyword2") Then
             ..........
        End If
        ..........
        ..........
        ..........
        ..........
        ..........
    Next

Private Function Make_A_Call(ByVal strURL As String) As String
    Dim strResult As String
    Dim wbrq As HttpWebRequest
    Dim wbrs As HttpWebResponse
    Dim sr As StreamReader

    Try
        strResult = ""
        wbrq = WebRequest.Create(strURL)
        wbrq.Method = "GET"
        ' Read the returned data   
        wbrs = wbrq.GetResponse
        sr = New StreamReader(wbrs.GetResponseStream)
        strResult = sr.ReadToEnd.Trim
        sr.Close()
        sr.Dispose()
        wbrs.Close()
    Catch ex As Exception
        ErrMessage.Text = ex.Message.ToString
        ErrMessage.ForeColor = Color.Red
    End Try
    Return strResult
End Function

编译代码需要将近5分钟才能完成循环。有时它无法完成。可以修改它以提高性能。请帮助提供更好的代码和建议。

1 个答案:

答案 0 :(得分:0)

请记住,有两个独立的瓶颈:

  • 下载HTML的带宽
  • CPU处理

您无法使用并行处理加快下载速度;这只能通过购买更多带宽来帮助。但是,您可以做的是确保下载和处理在不同的线程上完成。我建议做以下事情:

  • 使用BackgroundWorker个实例下载数据。
  • work completed 回调中,首先触发下一个后台工作程序,然后处理现有工作程序的结果(关键字搜索)。