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

C++Builder Discussion :

TList lente


Sujet :

C++Builder

  1. #1
    Membre régulier

    Inscrit en
    Mai 2002
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 93
    Points : 85
    Points
    85
    Par défaut TList lente
    salut !
    j'ai un probléme en utilisant TList (et avec TCheckListBox) ,j'ai un thread qui remplit la list avec la methode Add() dans une boucle ,au debut quand Count est inferieur à 300 tout est pent mais une fois Count est grande d'environ 200-300 et plus ,plus ca avance plus ca deviens lent d'inserer une ligne dans la liste...
    alors y'a qq pour m'aider ? est ce que c un defo du composant ou est ce que je code mal ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2003
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    J'utilise souvent une TList aussi pour remplir toute sorte d'objets, mais je remplit plutôt une TStringList en premier que j'affecte ensuite a mon object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TStringList *list = new TStringList();
    int i;
     
    while (i < /*count du tlist*/) {
        list->Add(".....");
    }
    ListBox1-ÀddStrings(list);
     
    delete list;
    C'est l'affichage lors de l'ajout ligne par ligne qui ralentit.[/code]

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Il faudrait sans doute faire en sorte que la CheckListBox ne se redessine
    pas à chaque entrée. Par exemple remplir une TStringList que l'on accroche
    à Items de la CheckListBox à la fin du processus de chargement.
    Voir aussi la propriété Sorted qui, lorsqu'elle est activée, entraine inévitablement
    une perte de temps...

    Si celà vient de la TList (en // aux Strings.. ?), il faut alors travailler
    directement au niveau des Items de la TList et non pas à l'aide des méthodes
    dédiées à l'ajout d'éléments (Insert ou Add).
    On approvionne alors la TList par blocs au lieu de le faire par éléments isolés.
    Ca peut ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int index;
    ...
    if(index >= (Liste->Count - 1))
    {
    Liste->Count = ListeCount + 40;//la liste est augmentée de 40 éléments NULL
    //on pourrait aussi faire : .... = index + 40;... mais on suppose ici que le paramètre
    // "index" est uniquement dédié au chargement.
    }
    Liste->Items[index] = ...;//on inscrit l'élément directement dans la liste
    index ++;
    Voir à ce sujet ce que dit l'aide à propos de la propriété Count de TList.

    A plus !

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il y a une méthode Expand() qui permet d'allouer de la place
    Augmente la capacité (Capacity) de la liste.

    TList* __fastcall Expand(void);

    Description

    La méthode Expand permet d'ajouter de l'espace afin d'ajouter des éléments à la liste. Expand ne fait rien si la capacité de la liste (Capacity) n'est pas entièrement utilisée.
    Si Count = Capacity, Expand augmente la valeur de Capacity de la manière suivante. Si la valeur de Capacity est supérieure à 8, Capacity augmente de 16. Si la valeur de la capacité est supérieure à 4 et inférieure à 9, Capacity augmente de 8. Si la valeur de la capacité est inférieure à 4, Capacity augmente de 4.

    La méthode renvoie l'objet liste agrandi.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Ce thread peut éventuellement être utile :
    http://www.developpez.net/forums/vie...ckwindowupdate

    Cordialement,

    Arnaud

  6. #6
    Membre régulier

    Inscrit en
    Mai 2002
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 93
    Points : 85
    Points
    85
    Par défaut
    merci a vous tous ,c'est juste ,c'et l'affichage ligne par ligne qui ralentie l'application ,merci du fond de mon coeur

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

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. BDE lent sur XP PRO
    Par Daniel Nespoulous dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/06/2004, 14h12
  3. TList et redimensionnement ?
    Par cpdump dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2004, 16h54
  4. SQL Server trés lent
    Par arwen dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 07/11/2003, 14h45
  5. Transtyper element d'1 variable pointant sur TList?
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2003, 22h53

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