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

WinDev Discussion :

Windev possède t'il un ramasse-miette ? [WD16]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut Windev possède t'il un ramasse-miette ?
    Bonjours aux pro du Windev,

    j'aurai voulu savoir si comme Java, Windev possède un ramasse-miette.
    S'il n'en possède pas ça veut dire qu'il faut que je fasse quelque chose du genre "libérer(MoiMeme)" dans les destructeurs de mes classes ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Oui, il y a un "ramasse-miette" dans Windev.
    Ce qui ne m'empêche pas de libérer mes objets dynamiques quand je n'en ai plus besoin, par habitude sans doute...

    Tatayo.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Merci pour l'info tatayo!

    Citation Envoyé par Tatayo
    Ce qui ne m'empêche pas de libérer mes objets dynamiques quand je n'en ai plus besoin, par habitude sans doute...
    Je pense que c'est une bonne habitude. En principe, tu dois nettoyer la mémoire avant le ramasse-miette.

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    La plupart du temps c'est plus simple de déclarer des objets "pas dynamiques" sans allouer ni libérer, et jouer sur leur portée.
    Il faut aussi comprendre la différence entre : Toto = Null et libérer Toto.

    Dans le 1er cas je supprime une référence, mais s'il en existe d'autres, l'objet existe toujours.
    Dans le 2ème cas l'objet est supprimé et toutes les références à cet objet sont mises à Null.

    Enfin, un objet "pas dynamique" est en réalité implicitement "dynamique" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Toto est un ClasseToto
    Titi est un objet dynamique = Toto
    libérer Titi
    SI Toto = Null ALORS
    // On a supprimé un objet "non dynamique". En réalité c'était une référence.
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCEDURE DonneToto()
    Toto est un ClasseToto
    Titi est un ClasseToto dynamique = Toto
    RENVOYER Titi // L'objet Toto existera toujours alors qu'il est hors de portée. En réalité c'était une référence comme une autre.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Hibernatus34 merci de soulever le problème. Tu es vraiment très fort! Tu as anticipé la question que j'allais poser 3h plus tard!

    J'aurai besoin de comprendre la différence entre un objet et un objet dynamique, pour pour faire les utiliser dans une classe.

    Je m'explique :
    J'ai deux classes, ListeComptes et Compte.
    La classe ListeComptes possède un tableau de Compte.

    - Je ne sais pas comment déclarer et initialiser mon tableau.
    J'ai fait un essai avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ListeComptes est une classe
         tabComptes est un tableau dynamique de Compte dynamique
    FIN
    
    PROCEDURE Constructeur()
         :tabComptes = allouer un tableau de 0 Compte dynamique
    Dois-je utiliser des Compte dynamique ou statique ? Pourquoi ?


    - Ensuite, je ne sais pas si ma fonction supprimer est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // nom est le nom du compte que je souhaite supprimer
    PROCEDURE supprCompte(nom est une chaine)
         cpt est un objet dynamique Compte
         cpt = :trouverCompte(nom)
    
         IF cpt <> Null THEN
              TableauSupprime(:tabComptes, nom)
              RENVOYER True
         ELSE
              RENVOYER False
         END
    Si cpt est une référence sur le Compte trouvé, ma méthode est correcte. Seulement, s'il s'agit d'un nouvel objet, elle ne marchera pas.

    Pour faire plus simple, dans ce type de cas, quand dois-je utiliser un objet dynamique ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Si tu utilises un tableau d'objets dynamiques, l'allocation du tableau te donne un tableau... de null. Il te faut alors instancier les objets dans le tableau.
    Si tu utilises un tableau d'objets, le fait de dimensionner le tableau instancie de fait les objets contenus.

    Quelle méthode prendre ? Ca dépend (et quand ça dépend... ):
    Si le constructeur de ta classe attend un paramètre et qu'il n'a pas de valeur par défaut, tu n'as pas d'autre choix(à ma connaissance) que d'utiliser un tableau d'objets dynamiques. De même si tu veux utiliser le polymorphisme.

    Dans ton cas je dirai que tu peux utiliser un tableau dynamique d'objets.

    Tatayo.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Ok, mais je vais utiliser les objets dynamiques, qui sont plus dans la philosophie objet, et dans mes habitudes de programmation.

    Merci pour votre aide "tatayo" et "Hibernatus34"!

  8. #8
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Une remarque additionnelle a tout ce qui a été dit.

    Elle concerne les requêtes...

    Il vaut mieux penser à utiliser HlibèreRequete sous peine de voir le serveur Manta grossir et grossir en mémoire et exploser parfois.
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    heu... Il est pas un peu moyen le ramasse miette de WD ?
    Merci pour l'info en tous cas

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

Discussions similaires

  1. Windev possède t'il un ramasse-miette ?
    Par DavidleVrai dans le forum WebDev
    Réponses: 1
    Dernier message: 28/06/2012, 16h58
  2. Optimiser le ramasse miettes
    Par ToTo13 dans le forum Général Java
    Réponses: 6
    Dernier message: 11/06/2011, 21h58
  3. Un ramasse miette en C
    Par Fused dans le forum Débuter
    Réponses: 17
    Dernier message: 27/11/2008, 19h24
  4. ramasse miette en langage c
    Par baylamat dans le forum C
    Réponses: 6
    Dernier message: 16/12/2006, 18h39

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