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

Composants VCL Delphi Discussion :

Lenteur avec TPageControl


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut Lenteur avec TPageControl
    Bonjour,

    mon application possède un composant TPageControl avec plusieurs TTabSheet. Chaque TTabSheeet possédant lui même plusieurs groupes ou panel.
    Le parent de certains panel ou group est attribué dynamiquement selon l'ActivePage. Le problème qui se pose, c'est qu'après une dizaine (pas de nombre exact, c'est un exemple) de changement d'ActivePage, définir une ActivePage deviens de plus en plus en lente.
    Le programme ne prend pas plus de poids en mémoire et je ne pense pas avoir de fuite.

    Si qlq un a une idée, je suis preneur
    Mais quelle bordel !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    le Changement de Parent ne devrait pas ralentir, je le fais assez souvent, je ne l'ai jamais tenté avec des onglets, si un panel doit toujours s'afficher, je lui met comme Parent celui du PageControl en DesignTime (cela peut être pénible mais nettement plus simple et c'est rarrissime)

    As-tu vraiement besoin d'un PageControl ? un TabControl qui offre les onglets sans les containeurs serait peut-être plus pratique dans ton cas si certains panels sont communs à plusieurs onglets, c'est la propriété Visible qui serait utilisé pour afficher les panels (surement plus légère pour la GDI et les handle Windows) par contre pénible à gérer effectivement dans l'IDE

    Vérifie ton code du OnChange, tu dois créer un objet qui consomme du processeur (thread ou timer) ou tu dois avoir une boucle qui fait des plus en plus d'itération (involontairement récursive à cause d'un Application.ProcessMessages)

    Je pense qu'un bug sur l'appel massif de SetParent dans la VCL ou dans Windows aurait déjà été découvert et surtout on en aurait déjà parlé sur le forum !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    le Changement de Parent ne devrait pas ralentir, je le fais assez souvent, je ne l'ai jamais tenté avec des onglets, si un panel doit toujours s'afficher, je lui met comme Parent celui du PageControl en DesignTime (cela peut être pénible mais nettement plus simple et c'est rarrissime)

    As-tu vraiement besoin d'un PageControl ? un TabControl qui offre les onglets sans les containeurs serait peut-être plus pratique dans ton cas si certains panels sont communs à plusieurs onglets, c'est la propriété Visible qui serait utilisé pour afficher les panels (surement plus légère pour la GDI et les handle Windows) par contre pénible à gérer effectivement dans l'IDE

    Vérifie ton code du OnChange, tu dois créer un objet qui consomme du processeur (thread ou timer) ou tu dois avoir une boucle qui fait des plus en plus d'itération (involontairement récursive à cause d'un Application.ProcessMessages)

    Je pense qu'un bug sur l'appel massif de SetParent dans la VCL ou dans Windows aurait déjà été découvert et surtout on en aurait déjà parlé sur le forum !
    Merci de ta réponse!

    Du côté du OnChange, c'est vide, j'ai vérifié en compilation avec un step by step et c'est vraiment l'assignation de l'ActivePage qui pose problème.

    Par contre, je ne vois pas comment me passer du PageControl mais je ne connais pas non plus le TabControl.
    Quelle est la grosse différence entre ses 2 composants?
    (en plus je viens de changer de pc et l'aide Delphi ne s'est pas installée :/ )
    Mais quelle bordel !

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Citation Envoyé par davels Voir le message
    Merci de ta réponse!

    Du côté du OnChange, c'est vide, j'ai vérifié en compilation avec un step by step et c'est vraiment l'assignation de l'ActivePage qui pose problème.

    Par contre, je ne vois pas comment me passer du PageControl mais je ne connais pas non plus le TabControl.
    Quelle est la grosse différence entre ses 2 composants?
    (en plus je viens de changer de pc et l'aide Delphi ne s'est pas installée :/ )
    De mémoire le tabControl tu n'as que les onglets et pas les 'pages'. Donc tu dois gérer toi même les actions en affichant, par exemple des panels

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par philnext Voir le message
    De mémoire le tabControl tu n'as que les onglets et pas les 'pages'. Donc tu dois gérer toi même les actions en affichant, par exemple des panels
    Merci de l'info
    Mais quelle bordel !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Problème résolu!

    Il n'y avait pas de fonction qui s'effectuait en arrière plan, mais mon panel principal composé de 2 ListView était mal nettoyé.
    En faite, j'avais oublié de faire un clear des groups, et à chaque refresh, les groups s'ajoutaient au précédent et le composant devenait lent.

    Par contre, pas vraiment de fuite mémoire constatée...
    Mais quelle bordel !

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pour les TListView, lors d'ajout massif, utilise BeginUpdate et EndUpdate !
    Sinon, oui, classique d'avoir une méthode de remplissage en oubliant un clear systématique !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Probleme de lenteur avec Netbeans 5.5
    Par sachet dans le forum NetBeans
    Réponses: 5
    Dernier message: 02/07/2008, 16h28
  2. problème de lenteur avec BO
    Par darwini dans le forum Débuter
    Réponses: 2
    Dernier message: 13/04/2007, 14h08
  3. Problème de lenteur avec 2 sous-formulaires
    Par picatchou dans le forum Access
    Réponses: 1
    Dernier message: 29/01/2007, 08h48
  4. pb de lenteur avec Index
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/12/2006, 11h48
  5. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 21h43

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