vb.net多线程web客户端.DownloadString,或使用DownloadStringAsync



我正在努力了解加速一个在多个网站的源代码中搜索字符串的小程序的最佳方法。目前的程序如下:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim urls() As String = TextBox1.Lines()
Dim stringstofind() As String = TextBox2.Lines()
For Each url As String In urls
    CheckForStrings(url, stringstofind)
Next
End Sub
Private Sub CheckForStrings(ByVal url As String, ByVal stringstofind() As String)
Dim wc As New WebClient()
Dim source As String = wc.DownloadString(url)
'MessageBox.Show(source)
For Each stringtofind As String In stringstofind
    If (source.IndexOf(stringtofind) <> -1) Then
        TextBox3.AppendText("url: " + url + " string: " + stringtofind + vbCrLf)
        Exit For
    Else
        TextBox3.AppendText("url: " + url + " string: " + "NOT FOUND" + vbCrLf)
    End If
Next
End Sub

似乎可用的选项有:使用parallel.f为每个循环遍历初始值。除了一些避免跨线程问题和阻塞GUI的编辑外,这似乎很简单,但似乎不是最好的方法

使用网络客户端。DownloadStringAsync方法。这是我看到的第一件事,但我不知道如何从DownloadStringCompleted事件中传回结果字符串。此外,如果我能解决这个问题,你如何限制发出的同时请求的数量,以避免网络连接过载?

我还看了一些使用.net4.5的c#示例,这些示例看起来很棒,但该程序需要在server2003上运行,所以我想这是不可能的

非常感谢您的帮助。

我会发布评论作为回答,因为这不会得到太多流量。

TPL根据CPU分配线程——它不会很好地处理那些不会给CPU带来负载的慢速连接。

一个简单的开始是用DegreeOfParallelism来节流。在此处输入链接描述

你可能会发现100是一个很好的并行度。

下一级的优化会变得更加复杂。如果是异步、线程池或组合。这将在很大程度上取决于网站的延迟。我不确定你会用async买很多,因为空闲线程没有那么多开销。

相关内容

  • 没有找到相关文章

最新更新