Vitesse d'execution

Résolu
Messages postés
3
Date d'inscription
dimanche 23 juillet 2006
Statut
Membre
Dernière intervention
8 septembre 2006
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Bonjour à tous !


J’essaye d’apprendre à programmer en utilisant Visual Basic 2005 par mes propres moyens à l’aide de livres consacrés à ce langage .


Etant donné mon niveau de débutant absolu, c’est de galères en bidouilles que j’arrive plus ou moins à obtenir ce que je veux.


Pour le moment, j’ai réussi à créer un programme qui envoie des « Ping » aux adresses IP comprises dans un intervalle saisis par l’utilisateur.


Le problème, c’est que mon modeste programme met 6 minutes complètes pour scanner 255 adresses.


Y aurait-il un moyen de réduire cette durée ?


Est-ce que les « Thread » ont quelque chose a voir avec mon problème !?


Sinon, c’est quoi un « thread » ?


Merci d’avance à ceux qui réfléchiront à mon problème.


 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

3 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
NB : je ne touche pas à DotNet

le ping par lui-même prend déjà un certain temps.
par contre ouai... je suppose qu'il est possible de faire tourner les 255 requêtes (on va dire çà comme çà) en même temps, donc avec 255 threads.
à savoir que je n'ai aucune idée s'il est possible d'en lancer tant à la fois.

un thread... c'est le fait de pouvoir faire tourner un morceau de ton appli (une procédure) en même temps que le reste.
en VB6 on ne peut pas (ou presque).

exemple :

Private Sub Form_Load()    
    Me.Show
    Call Proc1 
    Call Proc2 
End Sub 
'
Sub Proc1() 
    Dim i As Long 

    For i =  0 To 150000 
        DoEvents 
        Me.Caption = "compteur = " & i 
    Next i 
End Sub 
'
Sub Proc2() 
    Dim i As Long 

    For i = 0 To 150000 
        DoEvents 
        Label1.Caption "autre compteur en label = " & i 
    Next i 
End Sub

<small> Coloration
syntaxique automatique [AFCK] </small>
       

ici en VB6 le label1 ne va changer que quand la première procédure sera terminée.

en DotNet tu peux appeler la proc2 dans un autre thread et donc avoir les opérations en simultané.

peux pas faire plus, désolé
++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Salut,
Voici un test sur 1 ping sur 5 adresses différentes (fais sous vb2005). Chaque ping s'éxecute dans un thread à part
Essais cet exemple en créant simplement une application console et met un point d'arret sur le Console.WriteLine("Fini")
Essais avec tes 255 adresses (je sais y a un peu de boulot pour remplir tes adresses à pinger) mais je te garantis que tu mettra surement moins de 6 minutes.
Change également à la fin la durée de Sleep(5000) met plutot 300000

-------------------------------------------------------------------------

Module1

   Sub
Main()

      
      Dim thProcs(4) As Threading.Thread
      Dim coladdress As New List(Of String)(New String() {"www.vbfrance.com", "www.codeproject.com", "www.microsoft.fr", _
      "www.hotmail.fr", www.google.fr})

      For
i As Integer = 0 To coladdress.Count - 1
         Console.WriteLine(i.ToString & ")" & coladdress(i))

      Next
      
      Console.WriteLine()
      Console.WriteLine()
      Console.WriteLine("Ordre d'arrivé")
      Console.WriteLine(Strings.StrDup(10, "-"))

      For
i As Integer = 0 To thProcs.Length - 1
         thProcs(i) = New Threading.Thread(AddressOf Ping)
         thProcs(i).Start(New Object() {coladdress(i), i})

      Next

      Threading.Thread.Sleep(5000)
      Console.WriteLine("Fini")

   End
Sub

   Sub
Ping(ByVal value As Object)
   
      Console.WriteLine(String.Format("{2} {1}: Retour du ping = {0}", value(0).ToString, My.Computer.Network.Ping(value(0).ToString), value(1).ToString))

   End
Sub

End Module
Messages postés
3
Date d'inscription
dimanche 23 juillet 2006
Statut
Membre
Dernière intervention
8 septembre 2006

Merci beaucoup PCPT!


Je tente d'appliquer ton conseil en espérant que ce soit une solution!
Je te tiens au courant du résultat!


Encore merci!