cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
5 juil. 2011 à 12:56
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024
-
7 juil. 2011 à 19:10
Bonjour,
J'ai un projet qui consomme en temps normal 90Mo de RAM.
J'ai un Backgroundworker qui, à la suite d'accès au disque dur, de calcul, de conversion... fait monter la mémoire à 150Mo.
Le problème est que malgré qu'à la fin de son exécution, je vide toute les variables et utilise tous les "Dispose()" possible, la mémoire reste à 150Mo.
Bien entendu, si je réexécute le BackgroundWorker, la mémoire monte cette fois-ci à 210Mo, et ainsi de suite.
Existe-t-il un moyen efficace de libérer la mémoire?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 5 juil. 2011 à 22:47
Bonjour,
Oui, je suis tombé sur cette documentation :) mais malgré que je me suis assuré que l'objet à libéré était bien isolé (n'avais plus aucune référence possible), la mémoire ne se libère pas.
Donc soit le problème vient d'ailleurs (j'ai un Invoke dans ce thread, pour appeler une fonction sur le thread principal, je sais pas si ça joue), soit l'objet a encore des références. Pourtant, avec un Obj.Dispose et Obj = Nothing ça devrait aller non?
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 7 juil. 2011 à 19:10
Bonjour,
Les evenements peuvent aussi faire des références "oubliées"
Sinon, le GC gère plusieurs liste, des objets récents aux plus anciens, donc il arrive parfois que cette libération ne se fasse que sur certains objets.