Vitesse d'execution

Résolu
Vitchoura Messages postés 3 Date d'inscription dimanche 23 juillet 2006 Statut Membre Dernière intervention 8 septembre 2006 - 8 sept. 2006 à 17:39
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 8 sept. 2006 à 21:12
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

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
8 sept. 2006 à 19:15
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
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
8 sept. 2006 à 21:12
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
3
Vitchoura Messages postés 3 Date d'inscription dimanche 23 juillet 2006 Statut Membre Dernière intervention 8 septembre 2006
8 sept. 2006 à 20:11
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!
0
Rejoignez-nous