cs_Arkalis
Messages postés29Date d'inscriptionlundi 25 octobre 2004StatutMembreDernière intervention 1 décembre 2008
-
18 janv. 2005 à 01:47
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012
-
21 janv. 2005 à 11:16
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.
metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 20111 18 janv. 2005 à 04:32
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.
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 18 janv. 2005 à 09:21
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
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 18 janv. 2005 à 09:54
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.
cs_Arkalis
Messages postés29Date d'inscriptionlundi 25 octobre 2004StatutMembreDernière intervention 1 décembre 2008 20 janv. 2005 à 22:47
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 21 janv. 2005 à 11:16
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.