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 :

[Performance] For Each et For i=0


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 111
    Par défaut [Performance] For Each et For i=0
    Bonjour à tous,

    Simple question de performance : quelle méthode est la plus efficace (rapport temps/mémoire) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim ch as checkbox
    for i=0 to grbox.controls.count
    ch=grbox.controls(i)
    if ch.checked then.....
    next
    ET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each ch to grbox.controls
    if ch.checked then ...
    next
    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    Salut,

    je l'ai appris a ma formation mais j'ai pas retenu ce que le formateur a dit mais par logique, je dirais que le foreach est + optimisé pour ton exemple...

    * initialisation du "i"
    * aller rechercher le nombre d'élément dans ton groupbox
    * incrémentation du "i"

    ça fait déjà 3 étapes en + que le foreach doit certainement gérer plus vite... (j'espère que je me trompes pas sinon mon formateur va me tuer )

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 111
    Par défaut
    Bonsoir SoBaKa,

    Oui mais, même avec un for each, VB doit "savoir" où il doit s'arrêter.
    Ceci sous entend qu'il fait un Count sur le groupbox et qu'il y aussi un compteur derrière.

    Non ?

  4. #4
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    pour ton example question sans importance , c'est de l'ordre de O(n) avec un n de plus assez petit quelque soit ton UI .

    donc si c'est pour ameliorer les performances , cherche ailleur.

    ps: pour la clarete du code je te conseillerai d'utiliser le plus possible les foreach a l'instar des for

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pour la petite histoire, une boucle foreach est développée en interne comme le parcours d'un iterateur à l'aide d'unre boucle while.
    Le compilateur transforme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Control unControle in this.Controls)
    {
        // Stuff
    }
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IEnumerator e = this.Controls.GetEnumerator();
    while(e.MoveNext())
    {
        // Stuff
    }
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Je me suis deja interessé à la question et d'apres mon bench j'en ai conclu que le For Each etait plus rapide que le For i as integer...

    par contre les boucles While, Do until, Do While ont toute la meme vitesse
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 111
    Par défaut
    Bonjour tout le monde,

    Citation Envoyé par zeavan
    pour ton example question sans importance , c'est de l'ordre de O(n) avec un n de plus assez petit quelque soit ton UI .

    donc si c'est pour ameliorer les performances , cherche ailleur.

    ps: pour la clarete du code je te conseillerai d'utiliser le plus possible les foreach a l'instar des for
    Je ne cherche pas à améliorer les performances
    C'est de la simple curiosité.

    Citation Envoyé par SaumonAgile
    Pour la petite histoire, une boucle foreach est développée en interne comme le parcours d'un iterateur à l'aide d'unre boucle while.
    Le compilateur transforme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Control unControle in this.Controls)
    {
        // Stuff
    }
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IEnumerator e = this.Controls.GetEnumerator();
    while(e.MoveNext())
    {
        // Stuff
    }
    Merci pour l'info. Mais du coup le For each devrait être plus long non puisqu'il faut créer un itérateur en mémoire ?

    Citation Envoyé par Aspic
    Je me suis deja interessé à la question et d'apres mon bench j'en ai conclu que le For Each etait plus rapide que le For i as integer...

    par contre les boucles While, Do until, Do While ont toute la meme vitesse
    Au moins, on est sûr du résultat dans les fait mais par la théorie on dirait plus le contraire non ?

    .

  8. #8
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    tout dépens de ce que tu veux faire...

    Si tu veux lister quelque chose le mieux c'est le for i as integer...

    Si tu veux rechercher un element précis dans une collection, le mieux est d'utiliser un For Each...

    Voila ^^
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2014, 10h24
  2. performance for each
    Par robert_trudel dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/06/2008, 13h53
  3. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 08h38
  4. utilisation de for each
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 19/03/2004, 15h30
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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