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 :

liberer la memoire


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut liberer la memoire
    bonjour
    pour eviter de charger la memoire inutilement, je ne cree pas toutes les forms de mon appli au demarrage
    je les cree a la demande
    mais quand je les ferme, malgre un form.release
    je ne recupere pas la memoire perdu a la creation
    qui sait pourquoi et quelle solution ai-je

    merci

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Il faut bien être conscient d'une part de tous ce qui se créer, et d'autre part tous ce qui se libère ou non automatiquement.

    Premier outil: soi-meme
    Deuxieme outil: Memproof (gratuit) http://www.automatedqa.com/downloads/memproof/

    Les deux couplés font bien avancer les choses.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    ben ca m'aide pas
    je libere moi meme la memoire occupée par la form
    mais ca marche pas

  4. #4
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Quelle version de delphi as-tu ?

    Memproof (jusqu'à D7)) ne te dis pas qu'il y a des restes ?
    Car normalement, si les options "DCU de débogage", "infos débogage TD32", et "Fichier MAP Détaillé" sont bien cocchées, Memproof sera capable de t'afficher le code qui génère une création sans libération.

    Enfin, nous sommes pas des devins, et des fuites mémoires tout le monde en fait, sans forcément s'en rendre compte. Ainsi, soit on a tout le code pour comprendre, soit le développeur de ce code le passe en revue avec un soft du genre MemProof. Après, il faut aussi savoir qu'il y a des fuites mémoires dues à la VCL, ou a du code tier, qui ne sont pas rattrapables si on n'a pas les sources pour corriger.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    j'ai delphi 7 pro
    j'ai coche les options que tu m'as dit
    je regarderais ce soir si je peut ce que ca peut m'apporter
    merci
    voici le code concerné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PROCEDURE TForm1.Graphiquesemaines1Click(Sender: TObject);
    BEGIN
      wwdbgrid1.Visible := false;
      form11:=tform11.Create(application);
      form11.showmodal;
      wwdbgrid1.Visible := true;
      form11.release;
      filtre;
    END;
    [Modération]
    Merci d'utiliser les balises code ou quote, Laurent Dardenne
    [/Modération]

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Est-ce que tForm11.formcreate n'allouerait pas des objets?

    Dans ce cas, il faut définir la procedure tform11.destroy pour les libérer.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    j'ai essayé
    sans succes

  8. #8
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Pourquoi un Release ? et pas l'habituel Free ?
    Il faut bien lire l'aide pour comprendre a quoi sert la méthode release.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    free a été mon prmier choix
    puis j'ai essayé release
    puis destroy

    rien ne marche

  10. #10
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Comment fais-tu pour savoir que tu ne récupères pas toute ta mémoire ? (avec le gestionnaire de tache ?)

    Il faut utiliser .Free sauf pour des rares cas particuliers où il faut plutot utiliser .Release .

    Enfin, nous ne sommes toujours pas devenus devin, et qu'est-ce fais ta form11 ? on en sais rien... est-ce que c'est certain que c'est ce bout de code qui est a l'origine de l'hypothétique fuite mémoire ? rien pour le prouver...
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par neilbgr
    Pourquoi un Release ? et pas l'habituel Free ?
    Il faut bien lire l'aide pour comprendre a quoi sert la méthode release.
    ama conaissance release maine a free, mais elle est plus sur surtout si en détruit un objet est on est dedans,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  12. #12
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Ma question était posée a jopab04... me concernant je connais la réponse. Je voulais savoir dans quel but il faisait un release car peu usité.

    Pour bien préciser la différence entre Free et Release il suffit d'aller voir le code et on comprend qu'un simple un message window est envoyé à la form pour effecuter un free.
    Ceci sous-entend que, les messages étant dans une queue, ils seront traités jusqu'au message CM_RELEASE. Ainsi effectivement SI des traitements sur les messages ou autres actions dépendent de l'IHM, il est préférable d'utiliser Release.
    MAIS il faut bien faire attention, à la sortie de l'appel de Release, la form n'est toujours pas libérée. Aussi, si le free se passe mal (exception) c'est moins facilement gérable. (en gros un try except autour d'une Form11.Release ne servirait pas a grand chose).

    Ceci dit, on conclu que release ou free peu importe, nous n'avons pas suffisement d'infos pour aider jopab04.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  13. #13
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    oui, je vois la memoire non liberee avec le gestionnaire des taches

    dans la form11 il y a un tdbchart, trois edit et 6 boutons
    un tprintdialog et un pagesetupdialog

  14. #14
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    ok. très bien.

    Maintenant, juste avec le gestionnaire de tache, est-ce que la répettition (lourdingue) de l'appel au bout de code Graphiquesemaines1Click() provoque une augmentation constante de la mémoire ?

    Si oui, effectivement il y a fuite mémoire, et il faut donc aller voir qui ne libère pas quoi dans la form11.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  15. #15
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    oui, la memoire augmente de 400 k

Discussions similaires

  1. question sur liberation de memoire
    Par nivose110 dans le forum C
    Réponses: 15
    Dernier message: 12/04/2007, 22h32
  2. Liberer la memoire
    Par Renardo dans le forum Access
    Réponses: 13
    Dernier message: 15/05/2006, 11h33
  3. liberation de memoire necessaire ?
    Par firejocker dans le forum C
    Réponses: 14
    Dernier message: 09/05/2006, 17h14
  4. Liberation de memoire
    Par dede92 dans le forum C
    Réponses: 17
    Dernier message: 18/03/2006, 21h31
  5. liberation de memoire d une fenetre modale
    Par ienien dans le forum MFC
    Réponses: 6
    Dernier message: 04/01/2006, 13h53

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