Comment détecter les fuites de mémoire dans une application C# ? Quels sont les outils à utiliser ? Quelles sont les meilleures pratiques que vous connaissez ?
Réponses
Trop de publicités?La détection des fuites de mémoire n'est pas une tâche facile et il n'y a pas de réponse définitive à cette question. Vous pouvez utiliser des outils de profilage tels que le Profileur de mémoire ANTS o dotTrace . Vous pouvez également jeter un coup d'œil à la CLR Profiler de Microsoft, qui est gratuit mais plus difficile à utiliser.
Si vous craignez d'avoir une fuite de mémoire en C#, la première chose à faire est d'identifier le type de fuite en question. Le langage C# est doté d'un système de collecte des déchets, les fuites de mémoire ne sont donc pas courantes. Les sources les plus courantes sont la rétention de références à des objets de grande taille (comme les images), les grands arbres d'objets (comme les collections) ou le fait de ne pas nettoyer les objets non gérés (objets Windows natifs alloués par P/Invoke, poignées de fichiers ou connexions DB). L'élimination des objets IDisposable peut également libérer la mémoire plus rapidement, ce qui permet de réduire l'empreinte mémoire.
Les fuites de mémoire sont difficiles à coder en C# à cause du garbage collector. Le GC libère automatiquement les objets à un moment donné lorsqu'il n'y a plus de références. La seule façon de "fuir" de la mémoire est de laisser une référence forte non intentionnelle.
Je soutiens l'appel à dotTrace . Je l'ai utilisé et il fonctionne bien. J'ai également utilisé ANTS, mais je ne l'ai pas apprécié autant.