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 :

libération d'objets en fin d'application


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut libération d'objets en fin d'application
    Dans une application , j'ai des problème à la fermeture de l'application.
    les clients ont parfois un message d'erreur (voir pièces jointes)
    Cela est aléatoire et personnellement je ne le constate pas sur mon poste

    Dans la partie finalization de la fiche principale de l'application je libère différents objets. Si je mets en commentaire ces libérations , le plantage n'a plus lieu.

    J'ai un peu honte de poser cette question de newbie, mais quelles sont les conséquences si je retire ces libérations ? Aurais je des fuites de mémoire sur le pc ou bien l'application possède t elle un espace mémoire qui sera entièrement libéré une fois l'application terminée ?
    Images attachées Images attachées   

  2. #2
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Slt

    Pourquoi ne pas faire les ".Free", ou FreeAndNil dans le OnDestroy
    de la fiche ?

    T'es sur que t'essaies pas de liberer des objets deja détruits ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Il n'y a pas de raisons que ces objets soient déjà détruits.
    Ils n'ont pas d'owner responsables de leur déstruction, et je ne les détruit pas par code.D'ailleurs, dans ce cas, j'aurais systématiquement une erreur, hors elle est aléatoire.

    La libération dans le ondestroy de la fiche pose le même problème.

    Ma question : est "Les objets non libérés prennent ils encore de la place en mémoire une fois l'application terminée"

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par butch
    Ma question : est "Les objets non libérés prennent ils encore de la place en mémoire une fois l'application terminée"
    Je serais tenté de dire oui, sinon pourquoi les libérer?

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    il se peut que certains objets soient déjà libérés lors de ton appel ou sont en train de l'être ?
    Libéres-tu des instance de TForm ou dérivées ? Dans ce cas as-tu essayé avec release au lieu de Free ?
    Et de laisser ton appli sans libération mémoire, là tu te prépares tes futurs ennuis...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Non pas d'instances dérivées de tform...
    Mais comment se pourrait il que ces objets soient déjà libérés par ailleurs ?
    Je ne fais aucune libération explicite dans mon programme, et je ne précise pas un autre objet responsable de leur modification.

    Je viens de trouver cela dans l'aide
    Utilisez la section finalisation pour libérer des ressources allouées dans la section d'initialisation.
    Les objets que je détruits dans la partie finalization ne sont pas créés dans la partie initialization mais dans le create de la fenêtre principale. C'est peut être cela je vais essayer.

    Ma question sur la non libération des ressources peut paraitre bizarre, mais sur certains système par exmple, l'as400, les programmes s'executent dans un espace mémoire lié à un job.Lorsque le job se termine, tout l'espace mémoire est libéré y compris les zones non libérées par le programme.

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par butch
    Ma question sur la non libération des ressources peut paraitre bizarre, mais sur certains système par exmple, l'as400, les programmes s'executent dans un espace mémoire lié à un job.Lorsque le job se termine, tout l'espace mémoire est libéré y compris les zones non libérées par le programme.
    Je ne suis pas certains mais si les objets sont alloués dans le heap cela devrait être le cas mais il y a, entre autres, les ressources GDI de Windows qui elles ne sont pas concernées puisque situées en dehors du heap.

    Tu n'as pas fait de migration de cette application vers une nouvelle version de Delphi ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Je viens de la migrer de delphi 6 ver delphi 7, mais pas vers une version plus récente. J'utilise des composants tiers dont je ne suis pas sur de trouver les versions pour delphi 2007.

    Mais pourquoi cette question ? Les nouvelles versions de delphi m'aiderait à résoudre mon pb ?

    J'avais vu une fois un outil qui s'appelle mad except, je crois que c'est le moment de l'utiliser.

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par butch
    Mais pourquoi cette question ? Les nouvelles versions de delphi m'aiderait à résoudre mon pb ?
    Dans ce tutoriel US The New Memory Manager In BDS 2006, il est fait mention que certaine application migrée vers 2006 peuvent rencontrée des problèmes de mémoire qui n'existait pas auparavant car le modéle de gestion mémoire a été modifié. Mais pour D6 vers D7 je ne pense pas que cela soit le cas.

    Citation Envoyé par butch
    J'avais vu une fois un outil qui s'appelle mad except, je crois que c'est le moment de l'utiliser.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Le problème semble être résolu.
    Les objets qui étaient créés dans le oncreate de la fiche principale et détruits dans la partie finalization sont maintenant créés dans la partie initialization et détruits dans la partie finalization.

    Pourtant aucun des objets créés ne l'est avec la fenêtre comme owner....
    (Ci dessous la liste des objets créés)

    Merci pour ton aide Laurent.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ScripterGet:=TDCScripter.Create(nil);
    Scripterlocalevents:=TDCScripter.Create(nil);
    WinList:=TWinList.create(false);//dérivé de tobjectlist
    MyInfo:=TInfo.Create(nil);
    MemInfo:=TMemoryStream.Create;
    tcpclient := TTcpClient.Create(nil);
    MainStream:=TMemoryStream.Create;
    CurTempScript:=TStringList.create;
    MySvdCfg:=TRegistry.Create;
    slCache:=TStringList.create;
    ErreurChargement := TStringList.Create;

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

Discussions similaires

  1. Libération des objets créés
    Par miniil dans le forum Delphi
    Réponses: 11
    Dernier message: 03/06/2007, 11h03
  2. Réponses: 4
    Dernier message: 16/01/2007, 13h42
  3. TObjectList et libération des objets
    Par eponette dans le forum Delphi
    Réponses: 9
    Dernier message: 04/01/2007, 11h16
  4. Question simple sur la libération des objets
    Par gibet_b dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2004, 10h01
  5. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 10h37

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