Libérer de la mémoire

Signaler
Messages postés
724
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
-
sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
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?

Merci d'avance

4 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Salut,

As-tu passer ton code sur des outils comme FxCop pour voir si tu as des problemes de construction de classes (niveau design)

As-tu regarder avec clrprofiler ou la memoire est? Pour voir les generations de memoire et perfmon.

As-tu regarder du coté des weak references. (reference faible)?

A eviter bien sur l'appel du GC. (un test ou deux avec peut aider)
Messages postés
724
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Bonjour,

Alors, avec FxCop, il y avait juste un problème, mais c'est lui qui allait provoquer une telle fuite de mémoire.

Avec Clr Profiler, j'ai put constaté que ce qui reste en mémoire sont les Workflow :
Dans ce Backgroundworker, je charge des fichier XAML dans un System.Activities.Presentation.WorkflowDesigner ancré dans un ElementHost. Et pour des raison technique, lors du chargement du workflow je doit passer par un Délégué pour que ça se fasse sur le thread principale (sinon ça ne fonctionne pas).
Mais pourtant j'ai bien fait attention de Disposer chaque designer avant de passer au suivant

Le problème viendrait-il de ce fameux designer chargé?
J'avais essayé avec GC.Collect mais ça ne change absolument rien.


Merci :)
Messages postés
724
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Oups, pardon, rectification : mais c'est PAS lui qui allait provoquer une telle fuite de mémoire.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
Hello,

si tu as des évènements accrochés aux objets que tu instancies, je te conseille fortement de les supprimés avant le dispose...


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo