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

Windows Forms Discussion :

delete petite aide


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut delete petite aide
    bonjour

    peut on forcer a faire un delete ? sinon comment maitriser la destruction des instances ?

    Merci

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    Dans des cas extrêmes tu peux utiliser les méthodes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GC.Collect();
    GC.WaitForPendingFinalizers();
    La première force le garbage collector à libérer la mémoire inutilisée (de manière asynchrone). La deuxième permet d'attendre que le garbage collector ait fini de libérer la mémoire.

    Tu trouveras un exemple concret par ici.

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Ce code ne force pas la suppression des objets qui étaient dans la queue de finalisation.
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    Si on ne refait pas le GC.Collect(), les objets présents en queue de finalisation ne sont plus référencés, mais pas libérés.

    Par ailleurs, GC.Collect() est synchrone, c'est le traitement des finalisations qui se fait sur des threads séparés.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Greybird Voir le message
    Par ailleurs, GC.Collect() est synchrone, c'est le traitement des finalisations qui se fait sur des threads séparés.
    Exactement, d'où le WaitFor[...]. Ceci dit, il n'est pas nécessaire/recommandé de forcer une récupération (GC) de la mémoire. Si une variable doit être libérée, cela doit se faire par l'implémentation de IDisposable et l'appel de Dispose, pas par une récupération au niveau du GC.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Exactement, d'où le WaitFor[...]. Ceci dit, il n'est pas nécessaire/recommandé de forcer une récupération (GC) de la mémoire. Si une variable doit être libérée, cela doit se faire par l'implémentation de IDisposable et l'appel de Dispose, pas par une récupération au niveau du GC.
    Certes, il est préférable de passer par IDisposable, sauf dans des cas très maitrisés.

    Je corrigeais juste deux approximations, l'une sur le fait qu'il faut réappeller GC.Collect après le WaitForPendingFinalizer pour libérer effectivement tout ce qui est libérable, l'autre sur le fait que le GC.Collect est asynchrone, ce qui n'est pas tout à fait vrai.

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Greybird Voir le message
    Je corrigeais juste deux approximations...
    Je ne faisais que confirmer ce que tu disais et non pas corriger
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Panaméen Voir le message
    peut on forcer a faire un delete ? sinon comment maitriser la destruction des instances ?
    Le garbage collector détruit automatiquement les objets sur lesquels il n'y a plus de référence. Ce n'est pas fait immédiatement, seulement quand le système a besoin de récupérer de la mémoire (ou quand tu appelles GC.Collect). Par contre s'il reste des références sur tes objets, il ne seront pas détruits, quoi que tu fasses.

Discussions similaires

  1. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  2. petite aide sur les transactions et triggers SVP
    Par CharleLéo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2004, 20h43
  3. Petite aide pour gros problème : libstdc++
    Par Info-Rital dans le forum Linux
    Réponses: 5
    Dernier message: 30/08/2004, 19h17
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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