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.NET Discussion :

Pourquoi le Close d'une frm ne libère pas la mémoire vive?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut Pourquoi le Close d'une frm ne libère pas la mémoire vive?
    Bonjour,

    Je développe une application sur laquelle il y a plusieurs frm. Je passe de l'une à l'autre au cours de l'utilisation de l'appli.

    Au démarrage c'est la fenêtreA qui s'ouvre et la mémoire vive utilisée est de 45Mo.

    Lorsque je passe de la fenêtreA à la fenêtreB j'utilise un fenêtreB.Show puis un fenêtreA.Hide. A ce moment là la mémoire vive utilisée est de 80Mo.

    Si je veux revenir sur la fenêtreA je fais un fenêtreA.Show et un fenêtreB.Close et dans ce cas la mémoire vive reste toujours à 80Mo ! (dans la logique des choses, un Close aurait du libérer ce qui avait été utilisé!).

    Pour compliquer le tout, si je fais de nouveau un accès à la fenêtreB alors la mémoire vive augmentera de 15Mo ...

    En continuant de cette manière, la mémoire vive risque vite d'être saturée et (ça m'est déjà arrivé une fois) de provoquer un OutOfMemory.

    Qu'est ce que je peux ou dois faire pour libérer la mémoire non utilisée d'une frm qui est fermée?

    Cordialement,

    Julien

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu peux nous montrer ton code ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut
    Bonjour,

    Par des soucis de confidentialités je ne peux pas mettre le code original mais j'ai fais une petite application où sur la fenêtreA il y a un bouton qui permet d'afficher la fenêtreB et un autre qui permet de la fermer.

    Sur la fenêtreB se trouve 8 groupBox :
    4 avec 80 boutons dans chaque groupBox
    4 avec 35 numericUpDown dans chaque groupBox
    Tout ça pour charger la mémoire.

    Voici ce qu'on peut trouver pour la fenêtreA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class FenêtreA
     
        Private Sub butShowFenetreB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butShowFenetreB.Click
            FenêtreB.Show()
        End Sub
     
        Private Sub butCloseFenetreB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butCloseFenetreB.Click
            FenêtreB.Close()
            FenêtreB.Dispose()
        End Sub
    End Class

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    FenêtreB c'est quoi ? Un membre privé de FenêtreA ? Si c'est le cas, la fenêtre B ne sera jamais récupérer par le GC car la fenêtre A aura toujour une référence dessus.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut
    FenêtreB est une Windows Form que j'ai ajouté au projet.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    es tu en mode debug ou release ?
    si debug, teste en mode release pour voir si tu as le meme comportement mémoire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [Windows] Free ne libère pas la mémoire
    Par Higgins dans le forum Composants FMX
    Réponses: 9
    Dernier message: 15/06/2015, 16h42
  2. Réponses: 7
    Dernier message: 13/08/2014, 17h57
  3. Garbage Collector ne libère pas de mémoire
    Par Nico2050 dans le forum Général Java
    Réponses: 4
    Dernier message: 15/11/2012, 00h21
  4. mqsvc.exe ne libère pas sa mémoire
    Par Kagozuma dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 12/08/2011, 12h39

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