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

API, COM et SDKs Delphi Discussion :

Comment libérer la mémoire allouée au OleVariant ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut Comment libérer la mémoire allouée au OleVariant ?
    Bonjour,

    J'utilise Delphi 6 pour lire des fichiers XML (XMLDoc, XMLIntf).
    Beaucoup de variables de type OleVariant sont utilisées.

    Je "debug" mon application avec memproof et je me rend bien compte que beaucoup de OleVriaant sont la cause de mes fuites mémoire , du moins c'est ce que memproof à l'air de dire...

    si j'écris simplement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var 
    test: Olevariant;
    begin
    test := 'toto';
    end;
    Memproof me sort dans les resources non libérées: SysAllocString(toto,4)

    Que puis-je faire svp ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 669
    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 669
    Points : 25 473
    Points
    25 473
    Par défaut
    Essaye d'affecter Unassigned à ton variant ? ou une chaine vide ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Essaye d'affecter Unassigned à ton variant ? ou une chaine vide ...
    Déjà essayé je ne l'ai pas précisé désolé

    En cherchant sur le net pas mal de personnes ont eu le même soucis mais on ne sait pas si c'est un bug de memproof 0.9.5.0 où un bug dans les olevariant de Delphi.

    Toujours est-il que mon appli doit tourner 24/24 7/7 et fais beaucoup d'accès lecture/écriture sur des fichiers xml.
    Elle démarre à 30Mo et atteint 600Mo en 10 jours, en utilisant memproof j'ai pu corrigé quelques fuites dû à moi même("live pointer") et maintenant il ne me reste que le compteur OLE qui monte avec seulement des SysString qui restent en mémoire.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 669
    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 669
    Points : 25 473
    Points
    25 473
    Par défaut
    Après, une application Delphi qui tourne 24/24 et qui grapille de la mémoire, petit à petit, c'est assez classique, bon, c'est vrai que 600Mo au bout de 10 Jours, c'est beaucoup, en général, c'est 4Ko de temps en temps, ... au pire ça fait 100Mo en 10 Jours ... souvent lié au fenêtre ou handle divers ...

    Sinon, les Interfaces XML de Delphi sont connues pour être une calamité en terme de mémoire ... c'est aussi bien lié à Delphi qu'au IXMLDocument de MicroSoft ... en tout cas, c'est que l'on m'avait dit en D5 ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Après, une application Delphi qui tourne 24/24 et qui grapille de la mémoire, petit à petit, c'est assez classique, bon, c'est vrai que 600Mo au bout de 10 Jours, c'est beaucoup, en général, c'est 4Ko de temps en temps, ... au pire ça fait 100Mo en 10 Jours ... souvent lié au fenêtre ou handle divers ...

    Sinon, les Interfaces XML de Delphi sont connues pour être une calamité en terme de mémoire ... c'est aussi bien lié à Delphi qu'au IXMLDocument de MicroSoft ... en tout cas, c'est que l'on m'avait dit en D5 ...
    C'est exactement ce que je me dis aussi depuis un moment mais c'est très contraignant cette histoire...

    Ceci dit c'est vraiement dû à l'utilisation de variables de type Olevariant si je n'appelle pas les fonctions qui en utilise je n'ai pas de soucis.
    Par exemple pour accéder à une valeur d'attribut d'un noeud:

    - Si je fais: Node.AttributeNodes['attribut1'].Text j'aurais un sysstring('attribut1',9) qui restera en mémoire.

    - Alors que si je fais:
    I := Node.AttributeNode.IndexOf('attribut1');
    if I >= 0 then Node.AttributeNodes[I].Text;

    Aucun résidu en mémoire d'après memproof.

    Ceci est dû à l'utilisation de OleVariant dans la méthode TXMLNodeList.GetNode dans XMLDoc.pas.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Je remonte ce post j'ai toujours le problème...

    Quelqu'un utilise des Olevariant à fond avec Delphi et n'a pas de problème de mémoire ?
    J'aurais du mal à y croire

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 815
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 815
    Points : 13 532
    Points
    13 532
    Par défaut
    Je ne constate pas de Memory Leak avec D2007.

    Tu pourrais déjà essayer de remplacer Node.AttributeNodes['attribut1'].Text par Node.Attributes['attribut1'].

    Ensuite, si j'étais toi, je téléchargerais une version Delphi Perso récente pour voir si le problème persiste .

Discussions similaires

  1. Libérer la mémoire allouée par iplImage
    Par marouame dans le forum OpenCV
    Réponses: 4
    Dernier message: 23/04/2012, 20h30
  2. Comment libérer la mémoire alloué a un objet ?
    Par techz dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 26/08/2009, 08h44
  3. Comment libérer la mémoire tampon
    Par xmeszeus dans le forum Fortran
    Réponses: 4
    Dernier message: 20/11/2008, 09h29
  4. Libérer la mémoire allouée à un objet
    Par boudou dans le forum Langage
    Réponses: 6
    Dernier message: 21/02/2006, 22h25
  5. Comment libérer la mémoire d'un TList ?
    Par Tchaill39 dans le forum Langage
    Réponses: 8
    Dernier message: 16/11/2005, 17h53

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