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

Langage Delphi Discussion :

TListView -> utilisation de la mémoire


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut TListView -> utilisation de la mémoire
    Bonjour !

    Dans mon soft je dois remplir un TlistView plusieurs fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ListItem := LVPublicHolidays1.items.add;
    ListItem.Caption := DataSetHolSelect.Fields[ i_langSelect + 1 ].AsString;
    ListItem.SubItems.add(DataSetHolSelect.Fields[ i_langSelect + 1 ].AsString);
    sauf que j'ai remarqué qu'à chaque fois que je rajoute des lignes la mémoire de mon soft augmente (normal jusque là).
    Mais j'ai beau supprimer les lignes de mon TListView ou de destroy mon TListItem, ma mémoire n'est pas libérée et augmente toujours.
    Je suis sous Delphi 2007 et j'ai vu sur le net que ce serait un bug sous l'époque Borland, y a-t-il une alternative ?

    Merci pour votre soutient !

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Comment les lignes sont-elles "supprimées" ?

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Salut Papy214,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LVPublicHolidays1.Items.clear();

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Je n'ai pas de 2007 sous la main mais je vois 2 tests possibles:

    Utiliser ListView1.Items.Delete(); sur chaque élément plutôt qu'appeler le clear.

    Envisager que le problème vient de la libération de SubItems et faire un clear sur chaque SubItem des item et finir par un clear sur le liste générale.

  5. #5
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    J'ai essayé ListView1.Items.Delete() sur chaque éléments, change rien.
    Je n'ai pas de SubItem donc je pense pas que ce soit cela.

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Citation Envoyé par phoenixgreg Voir le message
    J'ai essayé ListView1.Items.Delete() sur chaque éléments, change rien.
    Je n'ai pas de SubItem donc je pense pas que ce soit cela.
    Ah ???

    ListItem.SubItems.add(DataSetHolSelect.Fields[ i_langSelect + 1 ].AsString);

  7. #7
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Oula oui pardon, bon ça change rien ma mémoire augmente toujours quand je rempli mon TListView et n'est jamais libérée...

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai le même problème sur un Delphi 10.1 Berlin.

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Item : TListItem;
       i    : integer;
    begin
       try
          for i := 0 to 1000 do
          begin
             Item := ListView1.Items.Add;
             Item.Caption := 'aaa';
             Item.SubItems.Add('bbb');
          end;
       finally
          ListView1.Clear;
       end;
    end;
    J'ai essayé :
    - ListView1.Clear;
    - Boucle downto avec un ListView1.Items.Delete(i);
    - Ajouter les items avec Item := TListItem.Create(ListView1.Items);
    - Ou encore de stocker mes "Item" et de les libérer via une List<T>;

    Mais pas mieux, mon appli (TForm avec un bouton et un listview) passe de 1.4 à 1.7mo, et continue d'augmenter si je lance la procédure d'ajout.

    Avec FastMM4 je ne voit pas de fuite mémoire pourtant.

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    ici, sur Berlin, il monte effectivement de 1.4 à 1.8 mais ensuite, ça ne bouge plus même si je lance le code 20 fois de suite

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    ici, sur Berlin, il monte effectivement de 1.4 à 1.8 mais ensuite, ça ne bouge plus même si je lance le code 20 fois de suite
    C'est vrai qu'il se calme mais ça augmente encore (moins vite), il est passé à 1.9 et ensuite 2.1 en cliquant pas mal de fois.

    C'est quand même un peu bizarre

  11. #11
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Oui il va falloir que je trouve un autre composant, peut-être en passant par JEDI, qql a une idée ?

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 675
    Points : 10 689
    Points
    10 689
    Par défaut

  13. #13
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    il n'y a pas un équivalent dans la rxlib ?
    un portage jusqu'à Berlin existe ici : http://www.micrel.cz/RxLib/dfiles.htm

  14. #14
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Bon on va prendre Virtual-TreeView au moins je le connais ^^ merci

  15. #15
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Alors autant pour moi tout est normal, j'ai juste oublié de regarder que dans mon TListView1.OnChange() j'avais en gros oublier de libérer un objet quoi ....
    Donc en effet il y a un peu de mémoire allouée à la première visualisation et insertion de mon TListView1 mais après rien ne bouge (Delphi 7).

    Merci pour vos réponses en tout cas !

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

Discussions similaires

  1. Utilisation de la mémoire vive par un programme
    Par Pixcoder dans le forum C++
    Réponses: 13
    Dernier message: 25/09/2006, 13h36
  2. Réponses: 21
    Dernier message: 21/07/2006, 17h55
  3. Utilisation de la mémoire dynamique
    Par Stany dans le forum Windows
    Réponses: 17
    Dernier message: 27/04/2006, 12h39
  4. Utilisation de la mémoire
    Par jagboys dans le forum MFC
    Réponses: 1
    Dernier message: 12/11/2005, 17h30
  5. Utilisation de la mémoire vive....
    Par Neilos dans le forum Windows
    Réponses: 9
    Dernier message: 24/11/2003, 12h09

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