Unload ne marche po :x

Résolu
Signaler
Messages postés
29
Date d'inscription
lundi 25 octobre 2004
Statut
Membre
Dernière intervention
1 décembre 2008
-
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012
-
Bonjour, j'aurais voulu poser une question concernant l'instruction Unload de VB6



l'instruction unload permet "théoriquement" de décharger une feuille de
la mémoire, par celà, je comprend libérer de la mémoire système la
mémoire utilisé par la feuille à laquelle on utilise cette instruction



Or quand on fait un Unload, la feuille est bien déchargée.... du
programme, mais pas de la mémoire du système, un test très simple



Créez 2 feuilles VB, une feuille principale appelée frmMain

et une feuille secondaire appelée frmAudio, plaquez dans la frmAudio un
contrôle multimédia bien lourd en ressources et un contrôle Command,
dans ds le code de cette feuille mettez :



' MediaPlayer étant OCX et strFileName un nom de fichier audio

Private Sub Form_Load()

Const strFileName as String = "Nom du fichier audio"

MediaPlayer.Open strFileName

End Sub



Private Sub cmdExit_Click()

Unload Me

End Sub





Dans la feuille principale frmMain, mettez 2 boutons, un bouton Test et un bouton Show avec ce code :



Private Sub cmdShow_Click()

frmAudio.Show

End Sub



Private Sub cmdTest_Click()

Dim i as Long

Me.Cls

For i = Forms.Count -1 to 0 Step -1

Me.Print Forms(i).Name

Next i

End Sub



Vala pour les codes, maintenant passons aux tests après compilation du
code (je suis sous win 2000, donc je ne peux que constater par rapport
à mon système....) en ouvrant mon gestionnaire de tache.



Dans mon cas, quand j'ouvre mon programme, il prend 2.4 Mo en Ram

Quand je click sur Show, il passe à 9.1 Mo en Ram pendant la lecture du fichier Audio

Quand je click sur Exit et bien.... la feuille est bien déchargée, mais
malheuresement mon programme occupe toujours 9.1 Mo en Ram, et pour
vérifier le déchargement, en cliquant sur le bouton Test, on verra
qu'il n'y a qu'une seule feuille présente pour l'application.....



J'ai aussi testé de mettre dans l'événement Exit de la feuille frmAudio



Set frmAudio = Nothing

Unload Me



Vu sur le forum, mais que dalle...



Quelqu'un peut me dire comment réellement libérer la mémoire ? car dans
ces cas la, cela sert strictement à rien dans nos programmes de
travailler minutieusement le code en choisissant si on met Unload Me ou
Me.Hide vu que l'application VB n'est pas foutu de libérer cette
mémoire occupée de la Ram.



Merci

5 réponses

Messages postés
193
Date d'inscription
jeudi 14 février 2002
Statut
Membre
Dernière intervention
25 mars 2011
1
A moins que le probleme vienne de windows qui gere mal la mémoire, la preuve il existe des utilitaires qui permette de "optimiser" la ram. Essaye juste comme ca d'ouvrir un wav vide avant de faire la méthode nothing. Juste comme ca pour voir si le faite de remplacer un wav par un autre plus petit te permet de gagner de la place.

@+
Metalcoder
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Windows a fait d'énorme progrés en la matière... Et tous les OS plantent c'est juste plus ou moins facile à faire planter.



Statistiquement, un utilisateur, fait souvent les mêmes opérations.
L'optimisation mémoire, c'est pas seulement passer l'éponge, c'est
aussi prendre en compte le fait qu'il y statistiquement 80% de chance
voir plus pour que l'utilisateur reface une opération similaire. Or les
traitements d'instenciation de réservation de structure,
d'initialisation par les constructeurs et j'en passe sont consommateur
de ressources machines.



Les nouveaux OS prennent en compte cet aspect des choses : ce qui est
vraiment important n'est pas nécessairement que la déssallocation
"physique soit effective" tant que le programme qui utilise la
ressource est actif. Ce qui est important c'est que toutes les
structures soient correctement libérées à la fin de l'exécution du
programme. et que la cohérence globale soit maintenue.



C'est comme ça que je comprend une petite partie de la stratégie des nouveau OS.

madbob
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Il y a quand même une différence fondamentale entre un Hide et un show,
elle n'est pas visible forcément visible en mémoire car l'espace occupé
est déclaré (qu'il contienne ou non de la data).



Si tu fais un Hide les valeurs au moment du Hide sont connues et restent accessibles

Si tu fais un unload les valeurs ne sont plus accéssibles.

madbob
Messages postés
29
Date d'inscription
lundi 25 octobre 2004
Statut
Membre
Dernière intervention
1 décembre 2008

Salut bah merci de vos réponses, je pense que finalement après quelques
jours de cogitement que bah le problème ne vient pas de VB mais plutot
du système d'exploitation qui ne libère pas la mémoire peut être pour
prévoir une utilisation future de la feuille et éviter le déchargement,
ou plutot que la feuille est bien déchargée mais que le gestionnaire de
taches ne l'indique pas, mais je pense que si un autre programme a
besoin de la mémoire windows va si nécessaire libérer cette mémoire de
disponible, enfin je me comprend, et je ne me pose plus cette question,
car je sais que dans tous les cas, je ne pourrais plus remettre mon
réveil à - de 10 mo. une fois qu'une alarme a sonné. m'enfin le
principal c'est qu'il me réveille ;)



et si ça interesse des personne, j'ai fait un petit réveil très très
simple d'utilisation ne demandant pas trop de ressources
(théoriquement) par le code avec juste une seule feuille présente pour
gérer le systray en fond de tache, on peut configurer 3 reveils
completement indépendant aussi bien sur la source sonore que sur le
volume sonore, on peut désactiver 1 reveil en particulier et
sélectionner indépendemment pour chaque réveil les jours ou on ne veut
po qu'il s'active, le tout est sauvegardé dans un fichier de config
pour restaurer les parametres donc dans mon cas, mon réveil démarre au
démarrage du pc, donc j'ai plus rien à toucher.



voilou
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Salut Arkalis,



Tu as certainement tes propres raisons pour ne pas mettre le source de
ton réveil en ligne, vu que tu déposes déjà... et je n'ai aucune
observation à faire .



Mais, peut-être que ton source à besoin d'être optimisé, peut-être pas, c'est pas si énorme ça 10mo.



Si tu posais clairement la question dans l'intitulé du source que tu
déposes, tu aurais sûrement des réponses positives, et des propositions
pour aborderd'une façon peut-être différente certains aspects de ton
programme, qui deviendrait alors moins gourmant.



En tout cas je m'interesserai à ce genre de problématique, et il y en a forcément d'autres dans ce cas.


madbob