Finalement je suis revenu a une façon de faire plus "classique"
1 2 3 4 5 6 7 8 9 10 11 12
|
Dim i As Integer
For i = 0 (pour le bgw1, 1 pour le bgw2 ... jusqu'a 10) To max Step 10
Dim s As String()
s = f.DataDL(tb1, i, tb2, maison)
If String.Compare(s(0), "Impossible") = 0 Then
Else
Col.Add(New Ligne(i, s))
End If
Me.Invoke(DelegueAjouterligne)
Next |
Je n'ai pas encore fait ce que tu m'as dit (utiliser l'évènement progresschanged pour lancer la maj) je voulais voir les performances de cette version
Pensez vous que
My.Computer.Network.DownloadFile(url, fichier)
empêche son accès pour le multithread ? logiquement non mais je me pose des questions j'obtiens de meilleures performance avec une fonction trouvée sur internet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
Shared Function Download(ByVal url As String) As String
' Déclaration des variables
Dim LeDomaine As Integer
Dim LeURL As String = ""
Dim LeHost As String = ""
Dim LeChemin As String = ""
Dim Resultat As String = ""
Dim RecupHTTPChaine As String = ""
Dim WebClient As New System.Net.Sockets.TcpClient
Dim WebStream As NetworkStream
Dim WebWriter As StreamWriter
Dim WebReader As StreamReader
' On découpe l'url envoyée en paramètre à la fonction
LeDomaine = InStr(UCase(url), "HTTP://")
If LeDomaine > 0 Then
LeURL = Mid(url, LeDomaine + 7)
Else
LeURL = url
End If
LeDomaine = InStr(LeURL, "/")
If LeDomaine > 0 Then
LeHost = Mid(LeURL, 1, LeDomaine - 1)
LeChemin = Mid(LeURL, LeDomaine)
Else
LeHost = LeURL
LeChemin = "/"
End If
' On construit notre requete HTTP
RecupHTTPChaine = "GET " & LeChemin & " HTTP/1.1" & vbCrLf & "Host: " & LeHost & vbCrLf & "Connection: Close" & vbCrLf & vbCrLf
' On ouvre une socket sur le port 80
WebClient.Connect(LeHost, 80)
WebStream = WebClient.GetStream
WebWriter = New StreamWriter(WebStream)
WebWriter.Write(RecupHTTPChaine)
WebWriter.Flush()
WebReader = New StreamReader(WebStream)
' On stock la page html dans notre variable "Resultat"
Resultat = WebReader.ReadToEnd()
' On ferme la socket
WebStream.Close()
WebStream = Nothing
WebClient.Close()
WebClient = Nothing
WebWriter.Close()
WebWriter = Nothing
WebReader.Close()
WebReader = Nothing
' On renvoi ce que l'on a récupéré
Download = Resultat
End Function |
Enfin je crois,
J'ai remarqué quelquechose d'intéressant, si vous utilisez des synclock pour prendre des données par exemple, pour votre traitement principale, il est plus avantageux de créer un autre lock pour l'affichage, de cette facon votre traitement ne sera pas encombré par l'affichage
Edit:
1 2 3 4 5 6 7 8 9 10
|
Shared Function mydownload(ByVal url As String) As String
Dim r As WebRequest = Net.WebRequest.Create(url)
Dim dataStream As Stream = r.GetResponse.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
reader.Close()
dataStream.Close()
Return responseFromServer
End Function |
Je viens de presque faire cette fonction et ca fonctionne, après faut voir laquelle des 3 est la plus rapide/accepte le multithread
Partager