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

Delphi Discussion :

[D7] Nb de compo vcl limité ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut [D7] Nb de compo vcl limité ?
    Bonjour.

    J'ai un programme qui contient beaucoup de composants vcl (environ 200).
    Jusqu'à maintenant, tout allait bien, mais il semblerai que je soit arrivé au nombre limite de composant. En effet, lorsque je pose un composant de plus sur ma fiche, quel que soit le composant, où que je le pose dans la fiche et ses "sous-objets" qu'elle contient, celà génère une erreur au moment de l'execution.

    Erreur du genre très vague "EAccesViolation patati patata..." qu'il ne servirai à rien que je retranscrive ici puisque l'on n'y apprends rien si ce n'est l'adresse mémoire en défaut.

    Avez-vous déjà rencontré ce problème ? Si oui, comment peut-on s'en sortir ?

    Toute aide me serai très utile et la bienvenue.

    Merci

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Peut-être un pb de handle Windows... C'est une ressource qui n'est pas inépuisable

    Plusieurs pistes sont à ta disposition: par exemple ne pas créer toutes fiches automatiquement lors du lancement de l'appli. Bien sûr la création/suppression (en mémoire) des fiches sera à gérer.

    L'autre piste consiste à créer dynamiquement les objets graphiques. Mais ce n'est pas forcément applicable dans ton contexte.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Oui, et merci pour ton aide.

    Effectivement, ces pistes restent possibles pour m'en sortir. Pourtant, je reste très surpris que la limite de compo soit si basse (environ 200)... je suis même surpris qu'il y ai une limite ! Les handles sont gérés par Windows, donc ça dépendrait aussi des autres applications lancés à ce moment là... Or, je n'ai pas trop d'appli lancés présentement... J'ai déjà été largement plus loin en nombres d'appli simultanées.

    Je précise que la quasi totalité des compos de ma fiche se trouvent répartis sur une dizaines de TTabSheet appartenant à un TPageControl, lui même sur une TTabSheet. Peut-être une limitation de ce coté là.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 093
    Par défaut Limite
    J'ai une appli avec plus de 28 TabSheet (réparti sur 6 page control, l'un deux en a bien 15) et 350 composants (dont 20 TWebBrowser), et le code dedans c'est un bordel sans nom ... je précise que les TabSheet contiennent des pageControl ...

    j'ai un programme de test, que je traine depuis des années, j'ai dans les 10 fenêtres, eh bien, je les ouvre toutes, je les colles chacune dans un tabsheet, j'ai plus de 1000 compo dans 10 tabsheet, ... pas de soucis non plus

    sinon, dans Delphi, tu peux voir l'aide du SDK API Windows :

    "Handle Limitations"
    "Some objects, such as user and GDI objects, support only one handle at a time. The system provides the handle when an application creates the object and invalidates the handle when the application destroys the object. Other objects, such as some kernel objects, support multiple handles to a single object. The operating system automatically removes the object from memory after the last handle to the object is closed.

    The total number of open handles in the operating system is limited only by the amount of memory available to the operating system. However, a single process may have no more than 16,384 open GDI object handles. The per-process limit on kernel handles is 2^30. There is no per-process limit on user handles, but there is a systemwide limit of 65,536."

    il semble que la limite soit de 16384 Control pour une application ... faut vraiement le vouloir pour avoir autant de control en même temps ...

    je serais toi, je nettoyerais ma dfm ... tu pourrais mettre le contenu de certains onglets dans des unités différentes, puis lorsque tu y accède la première fois au runtime tu fais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaForm := TOngletBiduleForm.create(PageControlAppli);
    MaForm.parent := TabSheetBidule;
    MaForm.Align := alClient;
    MaForm.show();
    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

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Citation Envoyé par ShaiLeTroll
    je serais toi, je nettoyerais ma dfm ... tu pourrais mettre le contenu de certains onglets dans des unités différentes, puis lorsque tu y accède la première fois au runtime tu fais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaForm := TOngletBiduleForm.create(PageControlAppli);
    MaForm.parent := TabSheetBidule;
    MaForm.Align := alClient;
    MaForm.show();
    Oui, l'idée me semble un bon compromis... Je vais essayer d'utiliser les cadres. Merci

    Edit quelques minutes plus tard : L'idée était finalement très bonne... En espérant ne pas avoir simplement repoussé la "limite" de quelques composants, mais en tout cas, un grand merci pour la suggestion

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

Discussions similaires

  1. Limitations avec le compo ZipMaster?
    Par NSKis dans le forum Delphi
    Réponses: 4
    Dernier message: 02/03/2015, 16h34
  2. [Compo] Tarif MAJ VCL Skin
    Par Droïde Système7 dans le forum Delphi
    Réponses: 4
    Dernier message: 06/05/2007, 16h21
  3. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56
  4. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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