複数の Web サイトのソースで文字列を検索する小さなプログラムを高速化するための最良の方法を理解しようとしています。現状のプログラムは以下の通りです。
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.for each を使用して、最初の for each ループをスレッド化します。クロススレッドの問題と GUI のブロックを回避するためのいくつかの編集を除けば、実行するのは非常に簡単に思えますが、それを実行する最善の方法とは思えません。
webclient.DownloadStringAsync メソッドを使用します。これは私が最初に見たものですが、 DownloadStringCompleted イベントから結果の文字列を返す方法がわかりません。また、これを解決できる場合、ネットワーク接続の過負荷を避けるために、同時リクエストの数をどのように制限しますか?
また、見栄えの良い.net4.5を使用したC#の例もいくつか見ましたが、プログラムはserver2003で実行する必要があるため、それは問題外だと思います
どんな助けでも大歓迎です。