Memory Leak

walibi333 Messages postés 6 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 27 juillet 2005 - 26 juil. 2005 à 11:15
Miiitch Messages postés 52 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 24 août 2005 - 27 juil. 2005 à 10:39
Bonjour,

Je voulais savoir si quelqu'un connaissait un outil pour aider à la détection des fuites mémoires en C# ? Du style Purify pour le C++ il me semble.

merci

11 réponses

Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
26 juil. 2005 à 11:28
euh , des fuites mémoires??? je n'ai jamais entendu parler de ca, je pense que le c# est très sécurisé, pas comme le cblusblus, alors le compilateur ne laisse pas executer ces trucs

(Je pense)

YaoYao !!
1 + 1 = 10
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 juil. 2005 à 11:32
Salut, il n'y a pas de memory leak avec le code managé justement ! A moins d'utiliser de la mémoire non managée, ce qui n'est pas fréquent dans des projets "classiques".

CLR Profiler ( sur le site de Microsoft ).
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
26 juil. 2005 à 12:00
ca arrive de perdre de la mémoire...

par exemple, un exemple à la con, essayé d'utiliser des images (bitmap), si vous ne faites pas de Dispose à la fin... et bah la mémoire monte, monte, monte...


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 juil. 2005 à 12:04
Et le Dtor du bitmap il appele Dispose, j'espère !?
0

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

Posez votre question
walibi333 Messages postés 6 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 27 juillet 2005
26 juil. 2005 à 12:10
J'utilise du code non managé justement. Pour traiter des images pixel par pixel c plus efficace quand même. Je pensais avoir correctement libéré ces ressources (normalement avec lock/unlock) mais je vais revérifier. Le problème que j'ai est que j'utilise des resosurces que je ne dois pas libèrer pas explicitement (je pense) avec dispose par exemple et qui trainent à la fin de mon exécution. Et ca GC ou pas le programme ne peut pas deviner quand est ce j'arrete de les utiliser. Bref, j'ai un résidu de 100 Mo après une exécution qui monte jusque 500 Mo...
0
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 2
26 juil. 2005 à 14:02
Une bonne habitude à prendre est de se forcer à faire un dispose sur
tous les objets possédant cette méthode...., j'ai moi aussi rencontré
des pertes de mémoires (pas seulement du à mon age) et pas sur des
bitmaps mais sur des usercontrol qui étaient créer dynamiquement sur
des panels et détruit par monPanel..Controls.Clear().

Théo
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 juil. 2005 à 15:06
Vi, mais normalement le destructeur il appelle Dispose, et le GC à moins d'un sortie anormale ( plantage ) du programme il n'oublie pas la méthode Finalize.
0
Miiitch Messages postés 52 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 24 août 2005 1
26 juil. 2005 à 17:11
Il faut surtout se forcer a utiliser using (tonobjet) { } quand c'est
possible, tu es sur au moins que Dispose sera appelé meme si une
exception est déclanchée.

Miiitch
0
walibi333 Messages postés 6 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 27 juillet 2005
27 juil. 2005 à 10:23
Salut,

Je me suis un peu plus documenté sur les méthodes à utiliser pour libérer les ressources en C# mais quelques questions substistent. En fait je travaille avec des classes qui, pour la plupart, contiennent des ArrayList et Hashtable en données membres, est ce que je dois appeler la méthode clear sur ces données pour informer le GC qu'elles ne sont plus nécéssaires ? Est ce que je dois en plus affecter la valeur null à ces conteneurs ?
Certains de ces conteneurs stockent des strings, donc type de base, pour ces conteneurs j'appele juste la méthode clear, pour les autres conteneurs qui stockent des images je les parcoure en entier et j'appele explicitement dispose sur le éléments... est-ce que la bonne facon de faire ?
D'une manière générale, comment est ce qu'on differencie une ressource managée d'une non managée ?

merci.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 juil. 2005 à 10:37
Salut, Le GC il passe "de temps en temps" faire son boulot, ou alors quand ton application à besoin de mémoire, il libère la mémoire des objets qui non plus aucune références valides ( reference == null ) rien a voir avec Dispose, il ne libere pas un objet juste parce qu'une méthode Dispose a été appellée dessus, mais l'interêt de la méthode Dispose, c'est que le concepteur de la classe libère les ressources non managées dans cette méthode et mets aussi plusieurs champs privés à null, donc collectable par le GC, c'est pour ca qu'il ne faut plus utiliser une classe disposée. Et dans une bonne conception, le destructeur ( la méthode Finalize ) appelle aussi Dispose, ainsi on est sûr que les ressources non managées sont liberées.
0
Miiitch Messages postés 52 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 24 août 2005 1
27 juil. 2005 à 10:39
Des que tu n'utilises plus un objet dans ton code, le GC sait qu'il
peut se detruire. meme si la variable n'est pas a null, c'est meme pour
cela que ce n'est pas la peine de le faire!
Par contre certains
objets heritent de l'interface IDisposable, generalement ces objets
bloque des ressources systemes, qu'il faut mieux liberer des qu'on en a
plus besoin sans attendre le passage du GC grace soit à la méthode
Dispose ou la close using { } comme dit plus haut dans la discussion.
Miiitch
0
Rejoignez-nous