Bonjour,
Je cherche depuis pas mal de temps une méthode fiable pour détruire les objets de façon certaine.
Pour fermer une "form", j'appelle la méthode Close() puis dans l'évènement FormClosed, j'appelle la méthode Dispose() pour toutes les ressources non managées et pour la form elle-même.
Si je fais un recherche des contrôles qui ne seraient pas détruits, la recherche me dit bien que tous les objets sont bien détruits et apparamment déréférencés.
Le problème est qu'en ouvrant ClrProfiler et en analysant via le gestionnaire de taches : il reste toujours quelques éléments de la form (ClrProfiler) et la mémoire n'est pas bien libérée.
J'ai l'impression que le ramasse-miettes (Garbage Collector) est bien paresseux.
J'ai donc essayé ce code
Le "nettoyage" est immédiat et l'occupation mémoire reste contenue à chaque ouverture et fermeture de la "form".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Try System.GC.Collect() System.GC.WaitForPendingFinalizers() Catch ex As Exception End Try
Je n'ai aucun retour d'erreur et le programme se comporte bien.
Malheureusement, en parcourant le web, il est dit partout qu'il NE FAUT PAS utiliser le GC et le laisser travailler seul.
Pour une form "lourde" de mon logiciel, si je n'utilise pas ces quatres lignes, j'ai une augmentation régulière de l'occupation mémoire et pourant je suis sur d'avoir libéré toutes les ressources non "managées" les bitmaps par exemple.
Un éclaircissement serait le bienvenu.
Merci d'avance.
Partager