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

Framework .NET Discussion :

Fuite mémoire .NET


Sujet :

Framework .NET

  1. #21
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par smyley Voir le message
    C'est pour celà qu'on a inventé GC.AddMemoryPressure.
    Je ne vois pas le rapport. Cette méthode est faite pour informer le GC que tu as alloué beaucoup de mémoire non managée c'est tout. Ou alors tu veux l'utiliser de manière artificielle dés que tu utilises une ressource non managée pour forcer plus souvent le GC à tourner ? Mauvaise idée à mon avis.

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Wow ca a bien avancé depuis la derniere fois.
    Mais j'avoue que je suis un peu perdu, alors vaudrait 'il mieux faire un destructeur, appelé dispose et supprimé l'objet de la liste des elements a finaliser, ou laisser le GC faire tout, tout seul ?

    Petite question : dans une structure en liste chainée (d'objets), pour éviter les fuites mémoire il faudrai mettre tous les objets de la liste a null, ou seulement la réference de la liste chainée ?


    Merci

  3. #23
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par alaks Voir le message
    Wow ca a bien avancé depuis la derniere fois.
    Mais j'avoue que je suis un peu perdu, alors vaudrait 'il mieux faire un destructeur, appelé dispose et supprimé l'objet de la liste des elements a finaliser, ou laisser le GC faire tout, tout seul ?

    Petite question : dans une structure en liste chainée (d'objets), pour éviter les fuites mémoire il faudrai mettre tous les objets de la liste a null, ou seulement la réference de la liste chainée ?


    Merci
    Laisser faire le GC seul, c'est à dire implémenter un finilazer sans implémenter dispose est une trés mauvaise idée. Si tu encapsules des ressources natives il FAUT implémenter dispose, la question est: faut-il aussi faire un finalizer ? Je crois que c'est préconisé par MS, moi je ne suis pas sur de l'utilité (voir mes réponses précédentes) sauf peut être dans des cas très particuliers.

    Pour ta structure en liste chaînée, le GC est qd même intelligent, il recherche l'ensemble des références "atteignables" et supprime les autres. Des éléments d'une liste null (donc non atteignable) sont également non atteignables et seront collectés.

  4. #24
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par alaks Voir le message
    Petite question : dans une structure en liste chainée (d'objets), pour éviter les fuites mémoire il faudrai mettre tous les objets de la liste a null, ou seulement la réference de la liste chainée ?
    Si ta liste chainé est 100 % .NET alors tu n'as rien à faire, le GC s'occupe de tout .
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #25
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Je ne vois pas le rapport. Cette méthode est faite pour informer le GC que tu as alloué beaucoup de mémoire non managée c'est tout. Ou alors tu veux l'utiliser de manière artificielle dés que tu utilises une ressource non managée pour forcer plus souvent le GC à tourner ? Mauvaise idée à mon avis.
    Mal utilisé, c'est une mauvaise idée, mais tu ne devrais pas sous estimer cette solution. Il vaut mieux avoir des Collect un peut plus souvent plutôt que d'avoir une application qui utilise 300 Mo sans jamais s'arrêter simplement parce qu'elle contient 80 Mo de données managées et le reste non managé.

  6. #26
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par smyley Voir le message
    Mal utilisé, c'est une mauvaise idée, mais tu ne devrais pas sous estimer cette solution. Il vaut mieux avoir des Collect un peut plus souvent plutôt que d'avoir une application qui utilise 300 Mo sans jamais s'arrêter simplement parce qu'elle contient 80 Mo de données managées et le reste non managé.
    Non mais on se comprend pas là. Bien sûr que si tu a des classes qui "encapsulent" beaucoup de mémoire non managée alors il faut utiliser cette méthode, c'est fait pour ça ! Maintenant qd on parle de ressources non managées c'est aussi souvent des handles (ouverture de fichiers, mutex etc...) et dans ce cas tu ne vas pas utiliser AddMemoryPressure pour artificiellement générer des collectes...

    Globalement ce que je veux dire c'est que l'appel des finalizer est lié à la gestion de la mémoire, que c'est non déterministe et surtout sans lien direct souvent avec la ressource que tu gères (tu peux ouvrir plein de handle sans jamais générer de garbage collection et inversement, ce n'est pas lié). A partir de là pour moi l'intérêt et plus que limité, contrairement aux destructeurs du C++ qui sont déterministes, ils sont appelés dés qu'on sort du scope de l'objet.

Discussions similaires

  1. Fuite mémoire dans application winform .NET 2.0
    Par olysmar dans le forum Framework .NET
    Réponses: 6
    Dernier message: 30/11/2012, 15h41
  2. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  3. Fuite Mémoire VB.NET
    Par LamInR dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/01/2009, 18h36
  4. [C# .NET 2.0] setTooltips et fuite mémoire
    Par xtream dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/11/2006, 20h20
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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