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 :

Temps de remplissage de liste différent selon l'appel [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut Temps de remplissage de liste différent selon l'appel
    Bonjour,
    J'ai un pb de lenteur qui me tracasse et que je ne comprends pas
    Pour remplir une TextBox en Autocompletion, j'ai crée la sub suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        Dim AcscCouleur As New AutoCompleteStringCollection
        Dim ListeCouleur As New List(Of String)
     
        Private Sub ChargementTxtCouleur()
            Call SuiviGeneral(3, "O", "ChargementTxtCouleur")
            Dim swTxtCouleur As New Stopwatch
            swTxtCouleur.Start()
            TxtCouleur.Visible = False
            ' ******* instruction ajoutées pour essai sans modification
            ListeCouleur.Clear()
            AcscCouleur.Clear()
            ' **********
            ListeCouleur = (From c In ctx.Couleurs Select c.Libelle).ToList
     
            Call SuiviGeneral(2, "I", "Chargé depuis base " & ListeCouleur.Count & " couleur(s) en " & swTxtCouleur.Elapsed.ToString)
     
            For Each CouleurLibelle In ListeCouleur
                If Not String.IsNullOrEmpty(CouleurLibelle) Then AcscCouleur.Add(CouleurLibelle)
            Next
     
            Call SuiviGeneral(2, "I", "Chargé Liste Couleur en " & swTxtCouleur.Elapsed.ToString)
     
            With TxtCouleur
                .AutoCompleteMode = AutoCompleteMode.SuggestAppend
                .AutoCompleteSource = AutoCompleteSource.CustomSource
                .AutoCompleteCustomSource = AcscCouleur
                .ReadOnly = False
            End With
     
            TxtCouleur.Visible = True
            swTxtCouleur.Stop()
     
            Call SuiviGeneral(3, "F", "ChargementTxtCouleur Temps Total chargement  = " & swTxtCouleur.Elapsed.ToString)
        End Sub
    je lance cette sub au chargement du Form en qq ms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Formulaire : FormSerieInferieureDetail -- Ouverture -- ChargementTxtCouleur
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé depuis base 5301 couleur(s) en 00:00:00.0611222
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé Liste Couleur en 00:00:00.0657366
    Formulaire : FormSerieInferieureDetail -- F-------- -- ChargementTxtCouleur Temps Total chargement  = 00:00:00.0909884
    J'ai par contre ajouté un Btn pour réactualiser la sourc de la TextBox, et la on passe à 15s à cause du chargement de la ListeCouleur !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Formulaire : FormSerieInferieureDetail -- Ouverture -- ChargementTxtCouleur
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé depuis base 5301 couleur(s) en 00:00:00.0321530
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé Liste Couleur en 00:00:15.1212054
    Formulaire : FormSerieInferieureDetail -- F-------- -- ChargementTxtCouleur Temps Total chargement  = 00:00:15.1287853
    Je ne comprends pas ..
    Merci de vos lumières !
    Bertrand

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtCouleur.AutoCompleteCustomSource  = Nothing
    à mettre avant la boucle qui fait des .add sur AcscCouleur

    selon msdn je vois un event CollectionChanged sur le type AutoCompleteStringCollection, donc ce qui se passe ca doit être le textbox qui à chaque .add est averti et fait quelque chose (qu'il fait beaucoup plus vite en une passe en n passes ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re bonjour
    Merci Pol63
    ça marche nickel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Formulaire : FormSerieInferieureDetail -- Ouverture -- ChargementTxtCouleur
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé depuis base 5301 couleur(s) en 00:00:00.0203369
    Formulaire : FormSerieInferieureDetail --  ** - Information -- Chargé Liste Couleur en 00:00:00.0295456
    Formulaire : FormSerieInferieureDetail -- F-------- -- ChargementTxtCouleur Temps Total chargement  = 00:00:00.0407927
    Par contre, je ne suis pas sûr de comprendre cette notion de multipasses, la seule différence entre les 2 appels, est que l'AutoCompleteCustomSource est déjà chargée au second appel :
    - il se passe bien quelquchose car la TexBox scintillait pendant la mise à jour, c'est pour cela que je l'avais rendu invisible pendant le sub
    - est ce que cette "multipasse" est due au fait que l'AutoCompleteCustomSource étant déjà chargée, il y a comparaison à chaque add ?

    Merci encore pour cette aide !
    Bertrand

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le framework est en grande partie codé en .net
    le textbox une fois que tu lui donnes sa source, il s'abonne à l'event collectionchanged
    quand tu fais un .add, la collection raisevent, le textbox exécute une sub lié à cet évènement, on peut donc penser qu'il fait le tour de la collection
    au 2ème .add, il a 2 items à parcourir (je ne sais pas ce qu'il fait avec, un hash peut etre) etc.. jusqu'au n-ième appel de .add
    (le .clear raise aussi le collectionchanged)

    en lui retirant la source et en lui redonnant une fois qu'elle est chargée, il ne parcours qu'une fois la collection (au moment où tu lui donnes)

    ce qui est le plus pénalisant en windows forms, c'est le redessin. le scintillement que tu avais prouve que le textbox se redessine à chaque .add dans sa source d'autocompletion
    certains controles (datagridview, listbox surement aussi) ont d'ailleurs des méthode BeginUpdate et EndUpdate permettant de dire quand on a fini de modifier quand on a plein de choses à modifier, sinon le controle se redessine à chaque changement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re,
    C'est maintenant beaucoup plus clair !
    Ce Framework est vraiment plein de subtilités :-)
    Merci encore
    Bertrand

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    d'où la nécessité de le connaitre quand on veut aller loin

    pour les cas complexes on peut regarder le code source avec un décompilateur tel Reflector ou JustDecompile

    quand on en a compris un morceau, le reste se devine, là j'ai imaginé ça, je n'ai jamais utilisé l'autocomplétion



    pense au bouton , ca évite aux gens de rentrer dans un topic où ils n'ont plus rien à faire ^^

    bon code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re,
    Il y a encore du chemin .. mais en progressant petit à petit ..
    Pour le Btn résolu, je pensais l’avoir mis, mais je en sais pas pourquoi, j'arrive pas à m'habituer au design : je pense toujours le contraire de sa fonction : je le vois comme un état et non une action, dur de vieillir !
    Merci encore
    Bertrand

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/03/2015, 11h41
  2. Remplissage de LISTE à partir de DICO.Temps de calcul explose !
    Par santaflam dans le forum Général Python
    Réponses: 12
    Dernier message: 12/12/2014, 10h24
  3. Temps d'exécution différent selon le contexte.
    Par Golgotha dans le forum Oracle
    Réponses: 2
    Dernier message: 30/07/2013, 19h11
  4. [Interface graphique]Composant différents selon le PC
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/08/2005, 10h05
  5. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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