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

VB 6 et antérieur Discussion :

problème fuite mémoire


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut problème fuite mémoire
    bonjour a tous,
    j'ai comme qui dirais un fuite mémoire...
    j'ai deja lu ( je pense) tous les post parlant de ce sujet pour vb.
    je risque d'avoir plusieurs questions avant de clore le post...
    voici la premiere.
    soit trois class->class1 class2 class3...avec une hierachie
    class1
    ....... class2
    ......... class3

    si je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'divers traitement...class1 appel class2..puis class3....affectation de varialbe diverse
    '.....
     Set objclass1 = Nothing
     collecinter.Add inter
    dans ce cas la mon nothing entraine bien l'appel de la class_Terminate()

    mais si je fais cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'divers traitement...class1 appel class2..puis class3....affectation de varialbe diverse
    '.....
     collecinter.Add inter
     Set objclass1 = Nothing
    ben la l'appel de Class_Terminate de class1 ne se fait pas....

    (j'ai lu les pour et contre pour utiliser ou pas lesnothing....mais je commence par la pour voir si cela y fait quelques choses)..

    une personne peut elle me dire pourquoi dans le second cas il n'y a pas d'appel a class terminante?
    Merci par avance de vos réponses.

    EDIT : bon ok..si je comprends bien l'appel ce class_terminate ne se fait pas parce que ben l'objet est dans un collection....
    si je fait une boucle sur la collection..pour liberer de la mémoire..cela ne donne rien..la fuite continue...
    une personnes peut etre me donner tous les cas de references circulaires.?.....
    il ne me semble pas en avoir.....mais il y a peut etre un cas en vb que j'ai loupé.
    merci par avance

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par didoboy Voir le message
    bonjour a tous,

    une personnes peut etre me donner tous les cas de references circulaires.?.....
    Es-tu absolument certain de développer sous VB6 et non sous VBA/Excel ?

    Si oui (VB6) qu'appelles-tu exactement référence circulaire sous VB6 ? Une fonction récursive sans fin ? des instructions dans un évènement Change qui modifient le contrôle subissant cetr évènement ? Quoi ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    Bonjour ucfoutu.
    d'apres les post que j'ai pu lire une reference circulaire c'est lorsque une classe reference une autre classe alors que l'autre classe la reference aussi...
    mais je me demande si il peut y avior d'autres type de reference circulaire...
    POuruqoi me demande tu si tu suis sous vbA ou vb6.?

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par didoboy Voir le message
    Bonjour ucfoutu.
    d'apres les post que j'ai pu lire une reference circulaire c'est lorsque une classe reference une autre classe alors que l'autre classe la reference aussi...
    mais je me demande si il peut y avior d'autres type de reference circulaire...
    Bonjour,
    UC fait allusion aux références circulaires sous Excel où une fonction de cellule est définie par rapport à elle-même.
    Ce que tu appelles fuite de mémoire n'en est pas une si j'ai bien compris -
    j'ai cru lire que tu sauvegardais ton object initial dans une collection :
    dès lors tu incrémentes le compteur d'objets et tu peux toujours mettre l'object initial à Nothing
    l'image conservée dans la collection interdira la destruction de l'object puisque le compteur n'est pas à 0 -
    il sera détruit quand l'objet sauvegardé sera détruit.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    bonjour darkvader..merci de ta réponse...
    heu...
    j'ai oublié de préciser que si je fais le set nothing avant le add de la collection...la class_terminate est appelleé...mais cela ne libère pas de mémoire pour autant....
    je lance la fonction....traitement..la mémoire augemente..mais apres les traitements..la mémoire est a l'état t-1....et si je fais des nothing..ben cela ne change rien a la mémoire....ce n'est pas une fuite ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    bon je progresse tant bien que mal....
    alors voila la situation..( code mis en direct ressemblant a ce que je fais)..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    'collecgeneral->collection publique du module
     
    public sub getinfo
     
    'traitement
     
    while condition
     
    set class1 new class1
     
    '--traitement par diverses sub ( utilisation de by ref)....
     
    for int=0 to Class1.collection
    '--traitement diverses sub..( sub recursive)
    next int
     
    collecgeneral.add class1
     
    Wend
     
    '...ttraitement divers...
     
    '->affectation de class0 (collection de class1)
     
    end sub

    ensuite l'object class0 est utilisé dans un autre module...lorsque son utilisation est finie....j'appel une méthode qui déclenche les nothing en cascade....

    quelques précisions..


    Class0 possède une collection d'objet de type class1
    Class 1 possède une variable de type class2
    Class2 possede un tableau de Class 3 et un tableau de class 4
    Class 3 possède des variables de type string,boolean,Une collection, et deux object Class4
    Class4 possède des vaariable de type integer et string



    les traitements fait dans la boucle et les recur libere la mémoire.
    les apples de class_terminate de class0, class1,class2,class3,Class4
    se font mais sans libération de mémoire...
    apres test mémoire...c'est le new class1 qui prend de la mémoire..mais je ne parviens pas a la désalouer

    Si une personne peut m'aider suis preneur..livraisons cette semaine...et risque de bug chez client.
    merci par avance.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    ..heu...en remplacant les objet de type classe4 dans la classe 3 par des type string...cela ne change rien...

    j'ai donc la hierarchie suivante :

    Class0 possède une collection d'objet de type class1
    Class1 possède une variable de type class2
    Class2 possede un tableau de Class 3 et un tableau de class 4
    Class3 possède des variables de type string,boolean,Une collection
    Class4 possède des variable de type integer et string
    ..
    les class terminate appelé mais pas de libération mémoire..une personne a t elle une idée?

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 102
    Points : 16 619
    Points
    16 619
    Par défaut
    Je vais peut être dire une bêtise (si, si cela m’arrive ).
    Mon propos ne répondra pas au fait de constaté ou plutôt croire constater une fuite mémoire.
    La fuite constaté ce produit-elle en lançant l’exécutable (plus difficile a vérifier, je le concède) ?
    Car la gestion de la mémoire n’ai pas toujours identique entre le run projet (F5 dans l’éditeur VB).
    De plus, il ne faut pas oublier que l’OS lui-même y met son grain de sel, s’il n’y a pas nécessité impérative de récupérer un espace mémoire, il le fait plus tard, et/ou il ne renseigne pas vraiment de la libération de cette espace mémoire.

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Je viens de poster ce [Trucs & Astuces] qui pourrait t'aider à identifier les objects non déférencés.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    Bonjour ProgElecT, DarkVader
    Merci pour vos réponses, vos contribs...
    la fuite se fait en lançant l'exécutable....oui....mais apres vérification je suis sous vba..
    Il semble que ce ne soit pas prioritaire pour le moment..je laisse le post ouvert ( si cela est possible)..pour y revenir apres car j'aimerais avoir le fin mot de l'histoire..
    merci DarkVader, je vais utiliser ta piste.

Discussions similaires

  1. Problème fuite mémoire
    Par vince29 dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 07/08/2012, 16h38
  2. Réponses: 5
    Dernier message: 06/07/2011, 15h35
  3. Problème fuite mémoire
    Par scary dans le forum Débuter
    Réponses: 1
    Dernier message: 03/08/2010, 11h33
  4. Problème fuite mémoire
    Par devconf77 dans le forum Windows
    Réponses: 12
    Dernier message: 04/10/2007, 20h45
  5. Problème fuite mémoire
    Par devconf77 dans le forum Windows
    Réponses: 3
    Dernier message: 30/08/2007, 18h33

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