51 votes

Outils de profilage de la mémoire .NET

Duplicata possible :
Quels sont les bons profileurs .NET ?

Je suis à la recherche de bons outils de profilage de la mémoire CLR .NET.

Ma principale exigence est qu'il fonctionne bien avec IIS et les applications CLR autonomes. Idéalement, je voudrais voir quels objets sont alloués, où ils sont alloués et quelle est leur taille ?

Quelqu'un a-t-il une bonne expérience avec un outil particulier qu'il serait heureux de recommander ?

45voto

Ben Robbins Points 1894

Je suis en train d'évaluer les deux Scitech .NET Memory Profiler 3.1 y ANTS Memory Profiler 5.1 . J'ai essayé celui de JetBrains il y a un an ou deux et il n'était pas aussi bon que ANTS, alors je ne me suis pas donné la peine cette fois-ci. D'après les sites web, il semblerait qu'il ne soit pas aussi bon pour mémoire que les deux autres.

L'ANTS et le profileur de mémoire Scitech ont tous deux des caractéristiques que l'autre n'a pas, donc le meilleur dépend de vos préférences. D'une manière générale, celui de Scitech fournit des informations plus détaillées, tandis que celui d'ANTS est vraiment incroyable lorsqu'il s'agit d'identifier l'objet qui fuit. Dans l'ensemble, je préfère celui d'ANTS parce qu'il est très rapide à identifier les fuites possibles.

Voici les principaux avantages et inconvénients de chacun d'entre eux, d'après mon expérience :

Caractéristiques communes d'ANTS et de Scitech .NET Memory Profiler

  • Fonction d'analyse en temps réel
  • Excellentes vidéos pratiques sur leurs sites web
  • Facile à utiliser
  • Raisonnablement performant (évidemment plus lent que sans le profiler, mais pas au point d'en être frustré).
  • Afficher les instances des objets qui fuient
  • En fait, ils font tous les deux très bien leur travail

ANTS

  • Filtres en un clic pour trouver les fuites les plus courantes y compris : les objets maintenus en vie uniquement par des gestionnaires d'événements, les objets qui sont éliminés mais toujours en vie et les objets qui sont uniquement maintenus en vie par une référence provenant d'un objet éliminé. Il s'agit probablement de la caractéristique la plus importante d'ANTS - la recherche de fuites est incroyablement rapide grâce à cela. D'après mon expérience, la majorité des fuites sont causées par des gestionnaires d'événements qui n'ont pas été décrochés et ANTS vous amène directement à ces objets. Génial.
  • Graphique de rétention d'objets. Bien que les mêmes informations soient disponibles dans Scitech, elles sont beaucoup plus faciles à interpréter dans ANTS.
  • Affiche la taille avec les enfants en plus de la taille de l'objet lui-même (mais seulement lorsqu'une instance est sélectionnée, malheureusement, pas dans la liste globale des classes).
  • Meilleure intégration à Visual Studio (clic droit sur le graphique pour accéder au fichier)

Scitech .NET Memory Profiler

  • Affiche la trace de la pile lorsque l'objet a été alloué. Il s'agit de vraiment utile pour les objets qui sont attribués à de nombreux endroits différents. Avec ANTS, il est difficile de déterminer exactement où l'objet fuyant a été créé.
  • Affiche le nombre d'objets jetables qui n'ont pas été éliminés. Bien qu'il n'indique pas la présence d'une fuite, il permet d'identifier les possibilités de résoudre ce problème et d'améliorer les performances de votre application grâce à un ramassage plus rapide des ordures.
  • Options de filtrage plus détaillées (plusieurs colonnes peuvent être filtrées indépendamment).
  • Présente des informations sur le nombre total d'objets créés (y compris ceux qui ont été ramassés). ANTS n'affiche que des statistiques sur les objets "en direct". Cela facilite l'analyse et le réglage des performances globales de l'application (par exemple, en identifiant les objets créés inutilement qui ne fuient pas nécessairement).

En résumé, je pense qu'ANTS vous aide à trouver plus rapidement ce qui fuit, tandis que Scitech fournit un peu plus de détails sur les performances globales de la mémoire de votre application et sur les objets individuels, une fois que vous savez ce qu'il faut regarder (par exemple, la trace de la pile lors de la création). Si la trace de pile et le suivi des objets jetables non éliminés étaient ajoutés à ANTS, je ne verrais pas la nécessité d'utiliser quoi que ce soit d'autre.

32voto

Craig Stuntz Points 95965

Il est étrange que Profiler CLR n'est pas encore mentionnée ici. Il est gratuit et fonctionne bien.

Méfiez-vous des nombreuses anciennes versions disponibles sur le site de Microsoft. En date de novembre 2011, la dernière version semble être celle-ci : dernière version (lien alternatif)

8voto

X-Cubed Points 1309

Si vous vous sentez vraiment désespéré, vous pouvez utiliser WinDbg avec la bibliothèque Son-of-Strike (SOS.DLL) qui est fourni avec le cadre .Net.

6voto

annakata Points 42676

Grand fan de JetBrains Profiler moi-même

5voto

jfs Points 13605

.N m'a beaucoup aidé dans mon projet précédent. Ce n'est pas gratuit mais c'est très bien.

.NET Memory Profiler est un puissant outil de pour trouver les fuites de mémoire et optimiser optimiser l'utilisation de la mémoire dans programmes écrits en C#, VB.NET ou tout autre tout autre langage .NET.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X