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

Signaler
Messages postés
20
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
7 avril 2009
-
Messages postés
20
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
7 avril 2009
-
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

6 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
le fait de fermer la fenêtre de détruit pas l'objet y referant.

appeles un .Dispose
Messages postés
20
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
7 avril 2009

Bonjour,

C'est ce que j'ai fait :

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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Même réponse que dans ton autre sujet --> http://www.vbfrance.com/infomsg.aspx?ID=1293351

C'est le Garbage Colector qui se charge de libérer le mémoire, et il le fait quand il a envie.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
20
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
7 avril 2009

Bien, ça j'ai compris .

Mais alors pourquoi ma mémoire ne se libère pas (même quand j'attends 1h !).
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
tu y fais quoi, dans ces fenetres ?
Messages postés
20
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
7 avril 2009

Dans la fenêtreA il y a deux bouton : un qui permet d'afficher la fenetrêB l'autre de la fermer (voir le code du post de 11h07).

Dans la fenêtreB il n'y a absolument rien d'utile, juste des boutons pour alourdir lr programme et consommer de la RAM.

J'aimerais poster mon projet en fichier joint mais je ne sais pas comment faire ici...