Quels sont les bons profileurs .NET?

374

Quels profileurs avez-vous utilisés lorsque vous travaillez avec des programmes .net, et lesquels recommanderiez-vous particulièrement?

ricree
la source

Réponses:

285

J'ai beaucoup utilisé JetBrains dotTrace et Redgate ANTS . Ils sont assez similaires en termes de fonctionnalités et de prix. Ils offrent tous deux un profilage des performances utile et un profilage de la mémoire assez basique.

dotTrace s'intègre à Resharper, ce qui est très pratique, car vous pouvez profiler les performances d'un test unitaire en un seul clic depuis l'IDE. Cependant, dotTrace semble souvent donner de faux résultats (par exemple en disant qu'une méthode a pris plusieurs années à fonctionner)

Je préfère la façon dont ANTS présente les résultats du profilage. Il vous montre le code source et à gauche de chaque ligne vous indique le temps nécessaire à l'exécution. dotTrace a juste une vue arborescente.

Le profileur EQATEC est assez basique et vous oblige à compiler des versions instrumentées spéciales de vos assemblages qui peuvent ensuite être exécutées dans le profileur EQATEC. C'est cependant gratuit.

Dans l'ensemble, je préfère ANTS pour le profilage des performances, bien que si vous utilisez Resharper, l'intégration de dotTrace soit une fonctionnalité mortelle et signifie qu'elle bat ANTS en termes de convivialité.

Le Microsoft CLR Profiler gratuit ( .Net Framework 2.0 / .Net Framework 4.0 ) est tout ce dont vous avez besoin pour le profilage de la mémoire .NET.

Mise à jour 2011:

Le profileur de mémoire Scitech a une interface utilisateur assez basique mais beaucoup d'informations utiles, y compris certaines informations sur la mémoire non gérée qui manquent à dotTrace et ANTS - vous pourriez le trouver utile si vous faites de l'interopérabilité COM, mais je n'ai pas encore trouvé de profileur qui fasse COM problèmes de mémoire faciles à diagnostiquer - vous devez généralement vous évader windbg.exe.

Le profileur ANTS a progressé à pas de géant au cours des dernières années, et son profileur de mémoire possède des fonctionnalités vraiment utiles qui l'ont désormais propulsé devant dotTrace en tant que package à mon avis. J'ai la chance d'avoir des licences pour les deux, mais si vous allez acheter un profileur .Net pour les performances et la mémoire, faites-en ANTS.

Matt Howells
la source
5
Le profileur dans Visual Studio est également très facile à utiliser, Visual Studio 2010 est en version bêta et est donc gratuit également. De nombreuses améliorations ont été apportées en 2010 pour l'affichage des conflits et des accès concurrents. essayez-le ...
Rick
15
@Rick Malheureusement, le profileur de Visual Studio n'est pas présent dans Professional Edition ...
Drake
Je ne suis pas du tout d'accord sur le fait que le profileur CLR est tout ce dont vous avez besoin pour le profilage de la mémoire .NET, bien qu'il soit probablement vrai si vous n'accordez aucune valeur à votre temps. Voir ma réponse ci - dessous un résumé des meilleurs deux profileurs de mémoire - ils vont vous aider à trouver les fuites de mémoire et les problèmes potentiels beaucoup plus rapidement.
Ben Robbins
1
Les versions actuelles du profileur EQUATEC ne sont plus gratuites.
David Schmitt
1
Il semble que EQATEC Profiler soit redevenu gratuit pour .NET (framework complet)
soren.enemaerke
88

D'autres ont couvert le profilage des performances, mais en ce qui concerne le profilage de la mémoire, j'évalue actuellement à la fois Scitech .NET Memory Profiler 3.1 et ANTS Memory Profiler 5.1 (versions actuelles en septembre 2009). J'ai essayé le JetBrains il y a un an ou deux et ce n'était pas aussi bon que ANTS (pour le profilage de la mémoire), donc je n'ai pas pris la peine cette fois. D'après la lecture des sites Web, il semble qu'il ne possède pas les mêmes fonctionnalités de profilage de la mémoire que les deux autres.

ANTS et le profileur de mémoire Scitech ont tous deux des fonctionnalités que l'autre n'a pas, donc ce qui dépendra le mieux de vos préférences. De manière générale, celui de Scitech fournit des informations plus détaillées tandis que celui de ANTS est vraiment incroyable pour identifier l'objet qui fuit. Dans l'ensemble, je préfère celui ANTS car il est si rapide à identifier les fuites possibles.

Voici les principaux avantages et inconvénients de chacun de mon expérience:

Caractéristiques communes à ANTS et 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 profileur attaché, mais pas tellement vous devenez frustré)
  • Afficher les instances d'objets qui fuient
  • Fondamentalement, ils font tous les deux assez bien le travail

FOURMIS

  • Filtres en un clic pour rechercher les fuites courantes, notamment: les objets maintenus en vie uniquement par les gestionnaires d'événements, les objets qui sont supprimés mais toujours vivants et les objets qui ne sont maintenus en vie que par une référence à partir d'un objet supprimé. C'est probablement la caractéristique la plus meurtrière des ANTS - la recherche de fuites est incroyablement rapide à cause de cela. D'après mon expérience, la majorité des fuites sont causées par le fait que les gestionnaires d'événements ne sont pas décrochés et ANTS vous amène directement à ces objets. Impressionnant.
  • 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 uniquement lorsqu'une instance est malheureusement sélectionnée, pas dans la liste globale des classes).
  • Meilleure intégration à Visual Studio (clic droit sur le graphique pour accéder au fichier)

Profileur de mémoire Scitech .NET

  • Affiche la trace de la pile lorsque l'objet a été alloué. C'est vraiment utile pour les objets qui sont alloués à de nombreux endroits différents. Avec ANTS, il est difficile de déterminer exactement où l'objet ayant fui a été créé.
  • Affiche le nombre d'objets jetables qui n'ont pas été jetés. Bien qu'il ne soit pas indicatif d'une fuite, il identifie les opportunités pour résoudre ce problème et améliorer les performances de votre application grâce à un nettoyage 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 les ordures collectées). ANTS affiche uniquement les statistiques des objets «en direct». Cela facilite l'analyse et le réglage des performances globales de l'application (par exemple, identifier où de nombreux objets créés inutilement ne fuient pas nécessairement).

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

Ben Robbins
la source
La version 4.0 de .NET Memory Profiler (désormais en préversion) dispose désormais d'une vue graphique. C'était la seule fonctionnalité que j'aimais dans le profileur ANTS que Scitech n'avait pas (en 3.1 / 3.5).
cplotts
45

J'ai récemment découvert EQATEC Profiler http://www.eqatec.com/tools/profiler . Il fonctionne avec la plupart des versions .NET et sur un tas de plates-formes. Il est facile à utiliser et certaines parties sont gratuites, même pour un usage commercial.

TrolleFar
la source
Échoue également sur les appels de queue :(
Bogue
Celui-ci est gratuit uniquement pour une utilisation non commerciale.
Jon Seigel
7
C'était entièrement gratuit en août 2008 lorsque TrolleFar a écrit sa réponse. Maintenant, comme le dit Jon, il n'est gratuit que pour une utilisation non commerciale.
Richard Flamsholt
8
Il s'avère qu'ils ont à nouveau modifié les termes du contrat de licence. Certaines parties sont à nouveau gratuites pour une utilisation commerciale.
TrolleFar
Depuis FEB2011, l'édition .NET normale pour auto / commercial est gratuite. Cet outil est agréable car il fonctionne sur le modèle client / serveur et peut profiler / contourner les limites répétées (par exemple Native-> COM-> NET-> COM-> NET peut être profilé). L'interface utilisateur est plutôt horrible :-)
31

[ Divulgation complète ]

Bien qu'il ne soit pas encore aussi complet que certains des autres profileurs de mémoire .NET répertoriés ici, il existe une nouvelle entrée sur le marché appelée JustTrace . Il est fait par Telerik et son objectif principal est de rendre le traçage / profilage plus facile et plus rapide à faire pour tous les types d'applications (web / Silverlight / desktop).

Si vous avez déjà trouvé le profilage et l'optimisation intimidants ou lents avec d'autres outils, alors JustTrace pourrait valoir le coup d'œil.

Todd
la source
12
Quand je vais le télécharger et l'essayer, Telerik veut que je m'inscrive et que je crée un compte. Et tous ces boutons d'abonnement à la newsletter sont cochés par défaut. Je serais heureux d'essayer JustTrace, mais pas si Telerik rend cela difficile.
Ryan Lundy
1
Merci d'avoir essayé, Kyralessa. Nous savons que ce processus peut être amélioré. Nous y travaillons en ce moment. Nous espérons lever rapidement ces obstacles. Pour l'instant, il suffit de décocher les cases et en 2 min, vous pouvez avoir un compte et télécharger JustTrace gratuitement. Désolé pour les ennuis à court terme. -T
Todd
9
poster en arrière et me faire savoir quand je peux télécharger sans créer de compte, et je vais essayer.
Ryan Lundy
4
Mise à jour: Aujourd'hui, j'ai pu télécharger en utilisant le lien dans la réponse sans avoir à créer de compte.
Ryan Lundy
25

N'oubliez pas nProf - un bon profileur de logiciels gratuits.

Greg Hurlman
la source
3
Semble un peu abandonné ... seulement une version alpha de 2006 :-(
Mauricio Scheffer
2
A très bien fonctionné pour moi. C'est maintenant un projet Google Code. A eu une sortie en juillet 2009.
User1
19
La page nProf indique maintenant: NProf n'est plus activement développé. Si vous recherchez un profileur .NET open source, jetez un œil à SlimTune ( code.google.com/p/slimtune )
Richard Ev
14

J'ai trouvé que dotTrace Profiler par JetBrains était un excellent outil de profilage pour .NET et leur mode ASP.NET est de qualité.

Chris Ballance
la source
12

ANTS Profiler . Je n'en ai pas utilisé beaucoup, mais je n'ai pas vraiment de plaintes concernant les fourmis. La visualisation est vraiment utile.

palmsey
la source
11

AutomatedQA AQTime pour le chronométrage et SciTech MemProfiler pour la mémoire.

Lars Truijens
la source
MemProfiler a sauvé notre équipe lorsque nous avons eu une fuite de mémoire. J'ai essayé d'autres outils, mais aucun autre outil n'a donné le même détail.
Greg Ogle
9

J'ai travaillé avec JetBrains dotTrace pour WinForms et Console Apps (pas encore testé sur ASP.net), et cela fonctionne plutôt bien:

Ils ont récemment ajouté une "licence personnelle" qui est nettement moins chère que celle de l'entreprise. Pourtant, si quelqu'un d'autre en connaît d'autres moins chers ou même gratuits, j'aimerais aussi entendre :-)

Michael Stum
la source
7

N'oubliez pas le génial profileur de mémoire scitech .net

C'est génial pour savoir pourquoi votre application .net manque de mémoire.

Sam Saffron
la source
1
Très bel outil. Facile à utiliser et vous permet de naviguer dans votre graphique d'objet. J'aime particulièrement le suivi de la mémoire «en temps réel». Il vous montre comment votre nombre d'objets se développe pendant l'exécution de l'application.
lowglider le
5

J'ajouterais que la capacité de dotTrace à différencier la mémoire et les sessions de suivi des performances est absolument inestimable (ANTS peut également avoir une fonction de différence de mémoire, mais je n'ai pas vu de différence de performance).

Pouvoir exécuter une session de profilage avant et après une correction de bogue ou une amélioration, puis comparer les résultats est incroyablement précieux, en particulier avec une application .NET gigantesque (comme dans mon cas) où les performances n'ont jamais été une priorité et où trouver des goulots d'étranglement pourrait être TRÈS fastidieux. Faire un diff avant et après vous permet de voir le changement du nombre d'appels pour chaque méthode et le changement de durée pour chaque méthode .

Cela est utile non seulement lors des modifications de code, mais également si vous avez une application qui utilise une base de données différente, par exemple, pour chaque client / client. Si un client se plaint de lenteur, vous pouvez exécuter une session de profilage à l'aide de sa base de données et comparer les résultats avec une base de données "rapide" pour déterminer quelles opérations contribuent à la lenteur. Bien sûr, il existe de nombreux outils de performance côté base de données, mais parfois j'aide vraiment à voir les mesures de performance du côté de l'application (car c'est plus proche de ce que l'utilisateur voit réellement).

Conclusion: dotTrace fonctionne très bien et le diff est inestimable.

shaunmartin
la source
4

AQTime est raisonnable, mais a un peu de courbe d'apprentissage et n'est pas aussi facile à utiliser que celui intégré dans Team Suite

Jeff Moser
la source
3

La version actuelle de SharpDevelop (3.1.1) a un joli profileur intégré. Il est assez rapide et s'intègre très bien dans l'IDE SharpDevelop et son runner NUnit. Les résultats sont affichés dans un style d'arborescence / liste flexible (utilisez LINQ pour créer votre propre sélection). Double-cliquer sur la méthode affichée saute directement dans le code source.

David Schmitt
la source
2

J'ai travaillé avec le profileur de RedGate dans le passé. A fait le travail pour moi.

Kev
la source
2

Je ne l' ai pas essayé moi-même, mais peut-être dotTrace ? Leur application ReSharper est certainement bonne. Peut-être que dotTrace l'est aussi :)

Svish
la source
1
J'ai utilisé dotTrace et je peux le recommander.
Jon Skeet
2

Je doute que le profileur fourni avec Visual Studio Team System soit le meilleur profileur, mais je l'ai trouvé assez bon à de nombreuses reprises. De quoi avez-vous spécifiquement besoin au-delà de ce que propose VS?

EDIT: Malheureusement, il n'est disponible que dans VS Team System, mais si vous y avez accès, cela vaut la peine de le vérifier.

Brian Rasmussen
la source
1
Je parlais de celui de VS2008, mais il n'est peut-être pas disponible dans toutes les versions (j'utilise VSTS). D'après les vidéos PDC2008, il semble que le profileur s'améliorera beaucoup dans VS2010.
Brian Rasmussen
1
Ce profileur est uniquement disponible avec les versions Team Systems de Visual Studio.
Chris Brandsma
Visual Studio Team System (Developer Edition) dispose d'un profileur. Voir < microsoft.com/visualstudio/en-us/products/teamsystem/… >.
gix
Visual Studio possède un profileur depuis VS 2005. Il n'est disponible qu'avec Team System. C'est, en fait, la raison pour laquelle j'utilise le système d'équipe (au travail, j'ai un professionnel). C'est un très bon profileur, à mon avis.
configurateur
C'est un profileur fin, mais ce n'est pas tout à fait à la hauteur de la nouvelle version de ANTS.
mqp
2

La dernière version du profileur de mémoire ANTS (je pense que c'est 5) bascule simplement !!! Je hantais une fuite en utilisant WinDbg et SOS car cela s'est avéré être le meilleur moyen avant, puis j'ai essayé ANTS et je l'ai eu en quelques minutes. Vraiment un merveilleux logiciel.

pablo
la source
2

Je voudrais ajouter yourkit java et .net profiler, je l'adore pour Java, je n'ai pas encore essayé la version .NET.

Redlab
la source
1

Malheureusement, la plupart des profileurs que j'ai essayés ont échoué lorsqu'ils sont utilisés avec des appels de queue, notamment ANTS. Je finis par écrire le mien. Il existe une implémentation simple sur CodeProject que vous pouvez utiliser comme base.

leppie
la source
1

Analyseur de performances Intel® VTune ™ pour un échantillonnage rapide

utilitaire73
la source
@ utility73 - très bonne ventilation des coûts CPU ligne par ligne dans vtune - c'est exactement ce que je recherchais aujourd'hui. Merci d'avoir suggéré cela.
Sichbo
1

Je dois apporter à votre attention un outil étonnant que j'ai déjà utilisé. AVICode Interceptor Studio . Dans mon entreprise précédente, nous avons utilisé ce merveilleux outil pour profiler l'application Web ( il s'agit de la plus grande application Web au monde et du plus grand projet informatique civil jamais réalisé ). L'équipe de performance a fait des merveilles avec l'aide de ce magnifique outil. C'est difficile de le configurer, mais c'est une activité ponctuelle et je dirais que cela en vaut la peine. Consultez cette page pour plus de détails.

Merci, James

James Poulose
la source
1

SpeedTrace est pour moi le meilleur outil du marché car il ne vous aide pas seulement à trouver des goulots d'étranglement dans vos applications. Il vous aide également à résoudre les scénarios pour savoir pourquoi votre application se bloquait, votre configuration ne s'est pas installée, votre application a raccroché, les performances de votre application sont parfois médiocres en fonction de l'entrée de données, par exemple pour identifier les transactions db lentes.

Poignard
la source
1

J'ai testé JustTrace de Telerik récemment et bien qu'il soit loin d'un produit fini, les gars vont dans la bonne direction.

Ivan Petrov
la source
1

Si la licence est un problème, vous pouvez essayer WINDBG pour le profilage de la mémoire

2 tours
la source
1

Le profileur NuMega True Time est toujours présent dans DevPartner Studio par Micro Focus. Il fournit des détails au niveau de la ligne et de la méthode pour les applications .NET ne nécessitant que des PDB, aucune source nécessaire (mais cela aide.) Il peut faire la distinction entre les routines algorithmiquement lourdes et celles avec de longues attentes d'E / S en utilisant notre pilote de synchronisation propriétaire en mode noyau par thread. La version 10.5 est livrée avec une nouvelle prise en charge de 64 processus le 4 février 2011. Plug sans vergogne: je travaille sur la gamme de produits DevPartner. Suivez http://www.DevPartner.com pour des nouvelles du lancement de la version 10.5.

Avertissement: je suis le chef de produit de DevPartner chez Micro Focus.

Matt Schuetze
la source
bienvenue à SO. Vous devrez divulguer toute relation avec DevPartner ou vous serez considéré comme un spammeur et traité comme tel. Je vois que vous avez répondu à un certain nombre de questions de profilage ...
John Saunders
0

J'ai trouvé beaucoup de problèmes dans une grande application C # en utilisant cela .

Habituellement, le problème se produit au démarrage ou à l'arrêt lorsque des plug-ins sont chargés et que des structures de Big Data sont créées, détruites, sérialisées ou désérialisées. Souvent, ils sont créés et initialisés plusieurs fois, et les gestionnaires de modifications sont ajoutés plusieurs fois, ce qui aggrave encore le problème.

Dans des cas comme celui-ci, le programme peut être si lent que seulement 2 échantillons sont suffisants pour localiser les sites d'appels de méthode / fonction / propriété coupables.

Mike Dunlavey
la source
0

Nous avons sélectionné YourKit Profiler pour .NET dans mon entreprise, car c'était la meilleure valeur (prix par rapport à la fonctionnalité). Pour une petite entreprise qui souhaite disposer de licences flexibles (licences flottantes), c'était un choix parfait - ANTS était à l'époque le médaillon du siège développeur.

De plus, cela nous a donné la possibilité de nous attacher au processus en cours, ce qui n'était pas possible avec dotTrace. Attention cependant, l'attachement n'est pas la meilleure option car tout .NET ralentira, mais c'était le seul moyen de profiler les applications .NET démarrées par d'autres processus. En ce qui concerne les fonctionnalités, ANTS et dotTrace étaient meilleurs - mais au final, YourKit était assez bon.

Slobodan Savkovic
la source
Depuis janvier 2012, YourKit a augmenté le prix du profileur YourKit. Par conséquent, l'avantage de prix peut ne plus être valable.
0

Si vous utilisez ASP.NET MVC, vous pouvez essayer MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)

eka808
la source