¿Cuáles son algunos buenos perfiladores de .NET?

¿Qué perfiladores ha usado al trabajar con progtwigs .net, y cuál recomendaría particularmente?

He usado JetBrains dotTrace y Redgate ANTS extensivamente. Son bastante similares en características y precio. Ambos ofrecen perfiles de rendimiento útiles y perfiles de memoria bastante básicos.

dotTrace se integra con Resharper, lo cual es realmente conveniente, ya que puede perfilar el rendimiento de una prueba unitaria con un clic desde el IDE. Sin embargo, dotTrace a menudo parece dar resultados espurios (por ejemplo, decir que un método tardó varios años en ejecutarse)

Prefiero la forma en que ANTS presenta los resultados de los perfiles. Le muestra el código fuente y a la izquierda de cada línea le dice cuánto tiempo tardó en ejecutarse. dotTrace solo tiene una vista en árbol.

El generador de perfiles EQATEC es bastante básico y requiere que compile versiones instrumentadas especiales de sus ensamblajes que luego se pueden ejecutar en el generador de perfiles EQATEC. Sin embargo, es gratis.

En general, prefiero ANTS para perfiles de rendimiento, aunque si usas Resharper, la integración de dotTrace es una característica clave y significa que supera a ANTS en usabilidad.

El Microsoft CLR Profiler ( .Net framework 2.0 / .Net Framework 4.0 ) es todo lo que necesita para el perfil de memoria .NET.

Actualización 2011:

El generador de perfiles de Scitech tiene una interfaz de usuario bastante básica pero mucha información útil, incluida información sobre memoria no administrada de la que carecen dotTrace y ANTS. Puede resultarle útil si está haciendo interoperabilidad COM, pero aún no he encontrado ningún generador de perfiles que haga COM problemas de memoria fáciles de diagnosticar: generalmente tiene que romper windbg.exe .

El generador de perfiles de ANTS ha avanzado a pasos agigantados en los últimos años, y su generador de perfiles de memoria tiene algunas características verdaderamente útiles que ahora lo han llevado más allá de dotTrace como un paquete en mi opinión. Tengo la suerte de tener licencias para ambos, pero si vas a comprar un perfilador .Net para rendimiento y memoria, hazlo ANTS.

Otros han cubierto el perfil de rendimiento, pero en lo que respecta a la creación de perfiles de memoria , actualmente estoy evaluando Scitech .NET Memory Profiler 3.1 y ANTS Memory Profiler 5.1 (versiones actuales a partir de septiembre de 2009). Probé el JetBrains uno hace uno o dos años y no era tan bueno como ANTS (para perfilado de memoria) así que no me molesté esta vez. Al leer los sitios web, parece que no tiene las mismas funciones de creación de perfiles de memoria que los otros dos.

Tanto ANTS como el generador de perfiles de memoria Scitech tienen características que el otro no posee, por lo que lo mejor dependerá de sus preferencias. En términos generales, el Scitech proporciona información más detallada, mientras que el de ANTS es realmente increíble para identificar el objeto con fugas. En general, prefiero el de ANTS porque es muy rápido para identificar posibles fugas.

Aquí están los principales pros y contras de cada uno de mi experiencia:

Características comunes de ANTS y ​​Scitech .NET Memory Profiler

  • Función de análisis en tiempo real
  • Excelentes videos instructivos en sus sitios web
  • Fácil de usar
  • Rendimiento razonable (obviamente más lento que sin el perfilador adjunto, pero no tanto que te frustres)
  • Mostrar instancias de objetos con fugas
  • Básicamente ambos hacen el trabajo bastante bien

HORMIGAS

  • Filtros de un solo clic para encontrar fugas comunes, incluyendo: objetos que solo mantienen vivos los manejadores de eventos, los objetos que están dispuestos pero que todavía están vivos y los objetos que solo se mantienen vivos mediante una referencia de un objeto eliminado. Esta es probablemente la característica más importante de ANTS: encontrar fugas es increíblemente rápido debido a esto. En mi experiencia, la mayoría de las filtraciones se deben a que los manejadores de eventos no están desenganchados y ANTS simplemente te lleva directo a estos objetos. Increíble.
  • Gráfico de retención de objetos. Si bien la misma información está disponible en Scitech, es mucho más fácil de interpretar en ANTS.
  • Muestra el tamaño con los niños además del tamaño del objeto en sí (pero solo cuando desafortunadamente se selecciona una instancia, no en la lista general de la clase).
  • Mejor integración con Visual Studio (haga clic con el botón derecho en el gráfico para saltar al archivo)

Scitech .NET Memory Profiler

  • Muestra el seguimiento de la stack cuando se asignó el objeto. Esto es realmente útil para objetos que están asignados en muchos lugares diferentes. Con ANTS es difícil determinar exactamente dónde se creó el objeto filtrado.
  • Muestra la cantidad de objetos desechables que no fueron desechados. Si bien no es indicativo de una fuga, sí identifica oportunidades para solucionar este problema y mejorar el rendimiento de la aplicación como resultado de una recolección de basura más rápida.
  • Opciones de filtrado más detalladas (se pueden filtrar varias columnas de forma independiente).
  • Presenta información sobre el total de objetos creados (incluidos los recogidos basura). ANTS solo muestra estadísticas de objetos “en vivo”. Esto hace que sea más fácil analizar y ajustar el rendimiento general de la aplicación (por ejemplo, identificar dónde se crean muchos objetos innecesariamente que no tienen necesariamente fugas).

A modo de resumen, creo que ANTS te ayuda a encontrar lo que está goteando más rápido mientras Scitech proporciona un poco más de detalle sobre el rendimiento general de la memoria de la aplicación y los objetos individuales una vez que sabes qué mirar (por ejemplo, seguimiento de stack en la creación). Si el rastro de la stack y el seguimiento de los objetos desechables no expuestos se añadieran a ANTS, no vería la necesidad de utilizar nada más.

Recientemente descubrí EQATEC Profiler http://www.eqatec.com/tools/profiler . Funciona con la mayoría de las versiones .NET y en un conjunto de plataformas. Es fácil de usar y algunas partes son gratuitas, incluso para uso comercial.

[ Divulgación completa ]

Si bien aún no tiene todas las características como algunos de los otros perfiladores de memoria .NET enumerados aquí, hay una nueva entrada en el mercado llamada JustTrace . Está hecho por Telerik y su objective principal es hacer que el seguimiento / creación de perfiles sea más fácil y rápido para todo tipo de aplicaciones (web / Silverlight / desktop).

Si alguna vez ha encontrado que el perfilado y la optimización son intimidantes o lentos con otras herramientas, entonces JustTrace podría valer la pena.

No te olvides de nProf – un perfilador freeware muy bueno.

He descubierto que dotTrace Profiler de JetBrains es una excelente herramienta de creación de perfiles para .NET y su modo ASP.NET es de calidad.

ANTS Profiler . No he usado muchos, pero realmente no tengo ninguna queja sobre HORMIGAS. La visualización es realmente útil.

AutomatedQA AQTime para sincronización y SciTech MemProfiler para memoria.

Si busca algo rápido, fácil y gratuito, http://code.google.com/p/slimtune/ parece hacer bien el trabajo.

He estado trabajando con JetBrains dotTrace para WinForms y aplicaciones de consola (aún no probado en ASP.net), y funciona bastante bien:

Recientemente también agregaron una “Licencia personal” que es significativamente más barata que la corporativa. Aún así, si alguien más conoce algunos más baratos o incluso gratuitos, me gustaría escuchar también 🙂

No te olvides de la impresionante scitech .net profiler de memoria

Es genial para rastrear por qué su aplicación .net se está quedando sin memoria.

Añadiría que la capacidad de dotTrace para la memoria de diferencias y las sesiones de seguimiento de rendimiento es absolutamente invaluable (las HORMIGAS también pueden tener una característica de memoria diferida, pero no vi una diferencia de rendimiento).

Ser capaz de ejecutar una sesión de creación de perfiles antes y después de una corrección de errores o mejora, luego comparar los resultados es increíblemente valioso, especialmente con una enorme aplicación .NET heredada (como en mi caso) donde el rendimiento nunca fue una prioridad y donde encontrar cuellos de botella podría ser MUY tedioso. Hacer una diferencia de antes y después le permite ver el cambio en el recuento de llamadas para cada método y el cambio en la duración de cada método .

Esto es útil no solo durante los cambios de código, sino también si tiene una aplicación que utiliza una base de datos diferente, por ejemplo, para cada cliente / cliente. Si un cliente se queja de lentitud, puede ejecutar una sesión de creación de perfiles utilizando su base de datos y comparar los resultados con una base de datos “rápida” para determinar qué operaciones están contribuyendo a la lentitud. Por supuesto, hay muchas herramientas de rendimiento en el lado de la base de datos, pero a veces realmente ayuda a ver las métricas de rendimiento desde el lado de la aplicación (ya que está más cerca de lo que el usuario realmente está viendo).

En pocas palabras: dotTrace funciona muy bien, y la diferencia es muy valiosa.

AQTime es razonable, pero tiene un poco de curva de aprendizaje y no es tan fácil de usar como el integrado en Team Suite

En el pasado, he utilizado el generador de perfiles que se envía con Visual Studio Team System .

La versión actual de SharpDevelop (3.1.1) tiene un buen perfilador integrado. Es bastante rápido y se integra muy bien en el IDE de SharpDevelop y su corredor NUnit. Los resultados se muestran en un estilo de árbol / lista flexible (use LINQ para crear su propia selección). Al hacer doble clic en el método mostrado, se salta directamente al código fuente.

He trabajado con Profiler de RedGate en el pasado. Hizo el trabajo por mí.

No lo he probado, pero tal vez dotTrace ? Su aplicación ReSharper es sin duda una buena. Quizás dotTrace también lo esté 🙂

Dudo que el generador de perfiles que viene con Visual Studio Team System sea el mejor generador de perfiles, pero he encontrado que es lo suficientemente bueno en muchas ocasiones. ¿Qué necesita específicamente más allá de lo que VS ofrece?

EDITAR: Desafortunadamente, solo está disponible en VS Team System, pero si tiene acceso a eso, vale la pena echarle un vistazo.

¡La última versión del analizador de memoria ANTS (creo que es 5) simplemente se mece! Estaba acechando una fuga usando WinDbg y SOS ya que resultó ser la mejor manera antes, luego probé ANTS y ​​lo obtuve en minutos. Realmente una maravillosa pieza de software.

Me gustaría agregar yourkit java y .net profiler, me encanta para Java, aunque no he probado la versión de .NET.

Lamentablemente, la mayoría de los perfiladores que probé fallaron cuando se usaban con llamadas de cola, sobre todo ANTS. Acabo de escribir el mío. Hay una implementación simple en CodeProject que puede usar como base.

Analizador de rendimiento Intel® VTune ™ para muestreo rápido

Debo traer una herramienta increíble a su aviso que he usado hace algún tiempo. AVICode Interceptor Studio . En mi empresa anterior utilizamos esta herramienta maravillosa para perfilar la aplicación web ( se supone que es la aplicación web más grande del mundo y el mayor proyecto civil de TI jamás realizado ). El equipo de rendimiento hizo maravillas con la ayuda de esta magnífica herramienta. Me duele configurarlo, pero es una actividad única y diría que vale la pena el tiempo. Mira esta página para más detalles.

Gracias, James

Para mí, SpeedTrace es la mejor herramienta en el mercado porque no solo lo ayuda a encontrar cuellos de botella dentro de sus aplicaciones. También lo ayuda a resolver los escenarios para descubrir por qué su aplicación se bloqueó, su instalación no se instaló, su aplicación se colgó, el rendimiento de la aplicación es a veces pobre dependiendo de la entrada de datos, por ejemplo, para identificar transacciones db lentas.

Recientemente he estado probando el JustTrace de Telerik y aunque está bastante lejos de un producto terminado, los muchachos van en la dirección correcta.

Si la licencia es un problema, puede probar WINDBG para crear perfiles de memoria

El generador de perfiles NuMega True Time sigue vivo en DevPartner Studio de Micro Focus. Proporciona detalles de nivel de línea y método para aplicaciones .NET que requieren solo PDB, no se necesita fuente (pero ayuda). Puede discriminar entre rutinas algorítmicamente pesadas frente a aquellas con espera de E / S larga utilizando nuestro controlador de tiempo de modo kernel por subproceso propio. La versión 10.5 incluye un nuevo soporte de 64 procesos el 4 de febrero de 2011. Plug desvergonzado: trabajo en la línea de productos DevPartner. Haga un seguimiento en http://www.DevPartner.com para conocer las novedades del lanzamiento 10.5.

Descargo de responsabilidad: soy el Gerente de Producto de DevPartner en Micro Focus.

He encontrado muchos problemas en una gran aplicación C # al usar esto .

Por lo general, el problema ocurre durante el inicio o el apagado a medida que se cargan los complementos, y las estructuras de Big Data se crean, destruyen, serializan o deserializan. A menudo se crean e inicializan más de una vez, y los controladores de cambio se agregan varias veces, agravando el problema.

En casos como este, el progtwig puede ser tan lento que solo 2 muestras son suficientes para identificar los sitios culpables de método / función / propiedad.

Seleccionamos YourKit Profiler para .NET en mi empresa, ya que era el mejor valor (precio vs. función). Para una empresa pequeña que quiere tener licencias flexibles (licencias flotantes), fue una opción perfecta: ANTS era el medallón de los desarrolladores de asiento en ese momento.

Además, nos proporcionó la posibilidad de adjuntar al proceso de ejecución que no fue posible con dotTrace. Sin embargo, tenga en cuenta que adjuntar no es la mejor opción ya que todo .NET se ralentizará, pero esta fue la única forma de perfilar las aplicaciones .NET iniciadas por otros procesos. En cuanto a las características, ANTS y ​​dotTrace fueron mejores, pero al final YourKit fue lo suficientemente bueno.

Si está en ASP.NET MVC, puede probar MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)