Quelles stratégies et quels outils sont utiles pour trouver les fuites de mémoire dans .NET?

J'ai écrit en C++ pour 10 ans. J'ai rencontré des problèmes de mémoire, mais ils pourraient être fixés avec une quantité raisonnable de l'effort.

Pour les deux dernières années, j'ai écrit en C#. Je trouve que je reçois encore beaucoup de problèmes de mémoire. Elles sont difficiles à diagnostiquer et à résoudre en raison de la non-determinancy, et parce que le C# philosophie est que vous ne devriez pas avoir à vous soucier de ces choses quand vous avez très certainement le faire.

Un problème particulier je trouve, c'est que j'ai explicitement disposer de nettoyage et de tout ce qui dans le code. Si je ne le fais pas, les profileurs de mémoire n'ont pas vraiment aider, car il y a beaucoup de pellicules, flottant sur vous ne pouvez pas trouver une fuite au sein de toutes les données qu'ils essaient de vous le montrer. Je me demande si j'ai eu la mauvaise idée, ou si l'outil que j'ai reçu n'est pas le meilleur.

Ce genre de stratégies et d'outils sont utiles pour lutter contre les fuites de mémoire dans .NET?

  • Le titre de la vous post ne correspond pas vraiment à la question dans ton post. Je vous suggère de mettre à jour votre titre.
  • Vous avez raison. Désolé, j'ai été un peu marre de la fuite de courant, je suis à la chasse! Titre mis à jour.
  • Ne pas être assez .NET, il n'est pas le problème. Votre code est.
  • Yep, mon code, ou le tiers des bibliothèques, j'ai le plaisir de l'utiliser.
  • Voir ma réponse. MemProfiler en vaut la peine. Son utilisation permettra également de vous donner un tout nouveau niveau de compréhension de l' .NET GC monde.
  • J'ai trouvé quelques vraiment bons articles qui ont été utile pour moi quand on regarde les problèmes de mémoire dans .NET et j'ai gardé une référence pour eux donc je les avoir autour. Débogage des Problèmes de Mémoire (en anglais) les Outils de Débogage pour Windows Débogage SOS Extensions ils ont tous été très utile. Je viens d'une C++ arrière-plan, trop donc je sais ce que tu veux dire. À la fin, il y a beaucoup de chevauchement dans les outils que vous utilisez pour lo
  • Vous voudrez peut-être vérifier dotTrace par JetBrains (créateurs de Resharper). Outil fantastique! jetbrains.com/profiler
  • vous pouvez utiliser deleaker - bon outil pour le débogage des fuites de mémoire...
  • Désolé pour amener une vieille question, mais pourquoi, OP dire: "C# philosophie est que vous ne devriez pas avoir à vous soucier de ces choses"
  • En tant que programmeur C++ à C#, j'ai appris que C# est des ordures collectées et que la mémoire inutilisée doit être automatiquement renvoyé à l'OS. Dans la documentation, j'ai lu à l'époque, il semblait que cet état d'esprit a été promu, et en effet, avec relativement peu de C# apps, vous pouvez la sortir avec la pensée comme ça.