7
votes

Testez des fuites de mémoire dans les applications .NET

Y a-t-il des outils bons (et gratuits) pour analyser la source statique ou les programmes d'exécution pour détecter les fuites de mémoire?

J'ai construit des services Windows et je veux m'assurer que les ne pas consommer de mémoire si je les laisse courir pendant des semaines à la fin.


3 commentaires

Le collecteur des ordures ne les ramasserait pas


Pas si vous conservez des références à eux. Par exemple: cela peut se produire si vous créez des objets avec des événements, puis de fixer des gestionnaires d'événements. Si vous ne retirez pas le gestionnaire d'événements, l'objet ne sera pas nettoyé.


Le type de fuite qu'il doit rechercher est des objets qui continuent de croître en taille, où il conserve une référence à l'objet couché. En outre, il pourrait avoir des bugs dans son code relatif aux ressources non gérées qu'il voudrait détecter, et au moins un bogue dans le temps d'exécution .NET lié à cela (la méthode CopyFromSreen fuit 1 poignée à chaque fois), donc je suppose qu'il veut vérifier les choses comme ça.


7 Réponses :


2
votes

ne répond pas à vos besoins d'être libre, mais il y en a une de la porte rouge, je pense que vaut la peine d'être suggérées - Profileur de mémoire des fourmis

J'ai déjà utilisé un certain nombre de leurs outils avant (certains essai, certains que nous avons achetés) et les ont trouvés très bons.


0 commentaires

1
votes

Redgate Fourmis Performance Profiler pourrait aider. Ce n'est pas gratuit ... mais il y a un essai de 14 jours qui peut suffire à faire fonctionner vos services.


0 commentaires

0
votes

Profil Sharp est une performance gratuite (open-source) et un profileur de mémoire pour .NET


0 commentaires

1
votes

Laissez votre service Exécuter et utiliser Performance Monitor pour collecter des informations sur l'utilisation de la mémoire du service. De plus, si vous utilisez des ressources non gérées, assurez-vous que votre code dispose correctement de ces ressources en utilisant Idisposable . Dans un environnement non géré, vous pouvez facilement avoir des fuites en oubliant simplement de libérer les pointeurs, mais cela n'est pas possible dans un environnement géré. Toutefois, si vous continuez à allouer de nouveaux objets et à les références afin qu'elles ne puissent pas être recueillies, votre service nécessitera de plus en plus de mémoire.


0 commentaires

1
votes

J'ai utilisé Microsoft's PROFILER CLR avec un certain succès. Assurez-vous de lire son Documentation pour obtenir les avantages complètes.


0 commentaires

0
votes

N'oubliez pas que vous pouvez utiliser le gestionnaire de tâches Windows pour détecter au moins la présence de fuites de mémoire dans votre service.

Un autre moyen d'utiliser le gestionnaire de tâches pour suivre les objets pour passer à l'onglet Processes, puis accédez à Vue > Sélectionnez les colonnes et vérifier Objets utilisateur < / Strong> et Objets GDI (GDI ne vous a probablement pas utile depuis que vous exécutez un service, mais d'autres peuvent le trouver utiles.)


0 commentaires

2
votes

Je peux recommander http://memprofiler.com/ , mais ce n'est pas gratuit.


0 commentaires