IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Vitesse de boucles For / Each [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut Vitesse de boucles For / Each
    Bonjour à tous,

    J'ai lu dans la base .Net de Microsoft que les boucles Each contenaient en interne des boucles For.
    Du coup, je me suis dit que pour optimiser il fallait éviter les boucles Each et les remplacer par des For le plus possible.

    J'ai quand même vérifié en testant dans la pratique avec une List, un compteur et deux façons différentes de boucler For / Each.

    Boucle For:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Call Chrono("On")
            For i = 0 To MaList.Count - 1 Step 1
                ListBox1.Items.Add(MaList(i).ToString)
            Next
            Call Chrono("Off")
            ListBox2.Items.Add(Duree.ToString)
    Boucle Each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Call Chrono("On")
            For Each Item As Integer In MaList
                ListBox1.Items.Add(Item.ToString)
            Next
            Call Chrono("Off")
            ListBox2.Items.Add(Duree.ToString)
    Pour avoir une bonne différence, j'ai poussé à 2000 items dans la list.

    La différence est très légère, mais c'est la boucle Each qui est plus rapide.

    Quelqu'un peut m'expliquer pourquoi ?

    Merci pour vos commentaires.

    PS : c'est peut-être moi, mais je trouve la librairie en ligne de Microsoft pratique mais très mal renseignée. C'est mal expliqué et des fois pas du tout.
    Sur le principe du Datasource par exemple, la librairie m'a induit en erreur longtemps par manque d'explications sur certains points importants.
    J'ai dû faire des tests pour comprendre toutes les implications.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    c'est plus compliqué que ca
    déjà le but d'un compilateur est de traduire ce que tu as écris en autre chose
    donc un for each est surement déjà traduit en for directement, ce qui pourrait faire qu'il n'y a pas de différence au final
    en plus le temps d'exécution est variable car il y a parfois du temps de compilation inclus, il convient donc en général de mesurer plusieurs fois le temps et ignorer la 1ère exécution
    à noter aussi qu'il y a des différences dans le code généré entre debug et release, et qu'un debugger attaché peut modifier le temps d'exécution

    donc quand on cherche à optimiser du code on commence par trouver un bout de code long à un endroit où on voudrait des perfs (appelé souvent ...), puis on essaye différentes choses, éventuellement on peut comparer le code IL généré pour les connaisseurs
    et avec l'expérience on a plus tendances à utiliser les bonnes choses directement
    après for ou for each n'est à mon avis pas un exemple où on peut gagner du temps
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut
    Merci beaucoup Pol63 !

  4. #4
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut
    Bonjour à tous,

    Désolé, je n'ai pas pu revenir plus tôt.
    J'ai réalisé les test dans un contexte "indépendant" sur une cinquantaine de cycles de 2 000 éléments.
    Je n'ai pas tenu compte des premières itérations.

    J'ai pris la moyenne des cinquante mesures pour For et Each.
    Résultat, le temps moyen est strictement identique dans les deux cas (même durée en ms).
    Même après plusieurs essais.

    Donc Each = For.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    le code du framework est en c# donc on peut aussi voir ce que fais la méthode for each, et je confirme elle fait un for ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle for each
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/08/2006, 20h50
  2. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  3. aide vba boucle for each paramétrée en range
    Par gotlieb dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/07/2006, 08h55
  4. [VBA-E] erreur boucle for each
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h38
  5. Boucle For each
    Par roots_man dans le forum ASP
    Réponses: 10
    Dernier message: 18/02/2005, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo