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

amoniaque Messages postés 20 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 7 avril 2009 - 7 avril 2009 à 09:46
amoniaque Messages postés 20 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 7 avril 2009 - 7 avril 2009 à 14:34
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 avril 2009 à 10:46
le fait de fermer la fenêtre de détruit pas l'objet y referant.

appeles un .Dispose
0
amoniaque Messages postés 20 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 7 avril 2009
7 avril 2009 à 11:07
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
7 avril 2009 à 13:39
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
0
amoniaque Messages postés 20 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 7 avril 2009
7 avril 2009 à 13:57
Bien, ça j'ai compris .

Mais alors pourquoi ma mémoire ne se libère pas (même quand j'attends 1h !).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 avril 2009 à 13:58
tu y fais quoi, dans ces fenetres ?
0
amoniaque Messages postés 20 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 7 avril 2009
7 avril 2009 à 14:34
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...
0
Rejoignez-nous