remarks cref c# .net profiling profiler

c# - cref - ¿Cuáles son algunos buenos perfiladores de.NET?



remarks c# (30)

¿Qué perfiladores ha utilizado al trabajar con programas .net y cuáles recomendaría en particular?


¡La última versión de ANTS memory profiler (creo que es 5) simplemente es genial! Estaba persiguiendo una filtración con WinDbg y SOS, ya que demostró ser la mejor manera antes, luego probé ANTS y ​​lo conseguí en minutos. Realmente una maravillosa pieza de software.


Debo traer una herramienta increíble para su aviso que he usado en algún momento. AVICode Interceptor Studio . En mi empresa anterior, usamos esta maravillosa herramienta para perfilar la aplicación web ( se supone que esta es la aplicación web más grande del mundo y el proyecto de TI civil más grande que se haya realizado ). El equipo de rendimiento hizo maravillas con la ayuda de esta magnífica herramienta. Es una molestia configurarlo, pero esa es una actividad de una sola vez y diría que vale la pena. Echa un vistazo a esta página para más detalles.

Gracias james


Desafortunadamente, la mayoría de los perfiladores que probé fallaron cuando se usaron con llamadas de cola, especialmente ANTS. Acabo de escribir mi propia. Hay una implementación simple en CodeProject que puedes usar como base.


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

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


El perfilador NuMega True Time vive 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 en comparación con aquellas con largas esperas de E / S usando nuestro controlador de tiempo patentado por hilo en modo kernel. La versión 10.5 se entrega con nuevo soporte de 64 procesos el 4 de febrero de 2011. Enchufe descarado: trabajo en la línea de productos DevPartner. Haga un seguimiento en http://www.DevPartner.com para conocer las novedades del lanzamiento de 10.5.

Descargo de responsabilidad: Soy el Gerente de producto de DevPartner en Micro Focus.



He encontrado muchos problemas en una gran aplicación de C # usando this .

Por lo general, el problema se produce durante el inicio o el apagado a medida que se cargan los complementos y se crean, destruyen, serializan o deserializan grandes estructuras de datos. A menudo, se crean e inicializan más de una vez, y los controladores de cambios se agregan varias veces, lo que complica aún más el problema.

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



He estado probando JustTrace de Telerik recientemente y aunque está lejos de un producto terminado, los chicos van en la dirección correcta.


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

Recientemente también agregaron una "Licencia personal" que es significativamente más barata que la corporativa. Sin embargo, si alguien más conoce algunos más baratos o incluso gratuitos, me gustaría escuchar también :-)


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


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 que es realmente conveniente, ya que puede perfilar el rendimiento de una prueba de unidad con un solo 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 del perfilado. Le muestra el código fuente y, a la izquierda de cada línea, le indica cuánto tiempo tardó en ejecutarse. dotTrace solo tiene una vista de árbol.

El perfilador EQATEC es bastante básico y requiere que compile versiones instrumentadas especiales de sus ensamblajes que luego pueden ejecutarse en el perfilador EQATEC. Es, sin embargo, gratis.

En general, prefiero ANTS para la generación de perfiles de rendimiento, aunque si usa Resharper, la integración de dotTrace es una función excelente y significa que supera a ANTS en su uso.

El Microsoft CLR Profiler gratuito ( .Net framework 2.0 / .Net Framework 4.0 ) es todo lo que necesita para la creación de perfiles de memoria .NET.

Actualización 2011:

El perfilador de memoria de Scitech tiene una IU bastante básica pero mucha información útil, incluida información sobre la memoria no administrada de la que carecen dotTrace y ANTS. Es posible que le resulte ú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: por lo general, tiene que romper windbg.exe .

El generador de perfiles ANTS ha avanzado a pasos agigantados en los últimos años, y su perfil de memoria tiene algunas características realmente útiles que ahora lo adelantaron a dotTrace como un paquete en mi opinión. Tengo la suerte de tener licencias para ambos, pero si va a comprar un perfilador .Net para el rendimiento y la memoria, hágalo ANTS.


La versión actual de SharpDevelop (3.1.1) tiene un buen generador de perfiles 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). Haciendo doble clic en el método mostrado, salta directamente al código fuente.


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


Me gustaría agregar que la capacidad de dotTrace para diferenciar la memoria y las sesiones de seguimiento del rendimiento es absolutamente invaluable (ANTS también puede tener una función de diferencia de memoria, pero no vi una diferencia de rendimiento).

Poder ejecutar una sesión de creación de perfiles antes y después de una corrección o mejora de errores, luego comparar los resultados es increíblemente valioso, especialmente con una aplicación .NET heredada de mamut (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 del lado de la base de datos, pero a veces realmente me ayuda a ver las métricas de rendimiento desde el lado de la aplicación (ya que está más cerca de lo que realmente ve el usuario).

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


No lo he intentado yo mismo, pero tal vez dotTrace ? Su aplicación ReSharper es sin duda una buena. Tal vez dotTrace es también :)


No se olvide de nProf , un perfilador de software gratuito que es muy bueno.



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

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

Aquí están los principales pros y los 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
  • Razonablemente ejecutante (obviamente más lento que sin el generador de perfiles adjunto, pero no tanto como para frustrarse)
  • Mostrar instancias de objetos con fugas.
  • Básicamente ambos hacen el trabajo bastante bien.

HORMIGAS

  • Filtros de un solo clic para encontrar fugas comunes que incluyen: objetos mantenidos vivos solo por los manejadores de eventos, objetos que se eliminan pero que aún están vivos y objetos que solo se mantienen vivos mediante una referencia de un objeto eliminado. Esta es probablemente la característica asesina de ANTS: encontrar fugas es increíblemente rápido debido a esto. En mi experiencia, la mayoría de las fugas se deben a que los manejadores de eventos no se desconectan y ANTS simplemente te lleva directamente 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 hijos, además del tamaño del objeto en sí (pero solo cuando se selecciona una instancia, desafortunadamente, no en la lista general de clases).
  • Mejor integración con Visual Studio (haga clic con el botón derecho en el gráfico para saltar al archivo)

Perfilador de memoria .NET de Scitech

  • Muestra el seguimiento de la pila cuando el objeto fue asignado. Esto es realmente útil para los objetos que se asignan en muchos lugares diferentes. Con ANTS es difícil determinar exactamente dónde se creó el objeto filtrado.
  • Muestra el recuento de objetos desechables que no fueron dispuestos. Si bien no es indicativo de una fuga, identifica oportunidades para solucionar este problema y mejora el rendimiento de su aplicación como resultado de una recolección de basura más rápida.
  • Opciones de filtrado más detalladas (varias columnas se pueden filtrar de forma independiente).
  • Presenta información sobre el total de objetos creados (incluidos los residuos recolectados). 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 innecesariamente muchos objetos que no necesariamente tienen fugas).

A modo de resumen, creo que ANTS lo ayuda a encontrar lo que se está filtrando más rápido, mientras que Scitech proporciona un poco más de detalles sobre el rendimiento general de la memoria de la aplicación y los objetos individuales una vez que sepa qué mirar (por ejemplo, seguimiento de la pila en la creación). Si el seguimiento de la pila y el seguimiento de los objetos desechables desechables se agregaran a ANTS, no vería la necesidad de usar otra cosa.


Para mí, SpeedTrace es la mejor herramienta del mercado porque no solo le ayuda a encontrar cuellos de botella dentro de sus aplicaciones. También le ayuda a resolver problemas para descubrir por qué su aplicación falló, su configuración no se instaló, su aplicación se cerró, el rendimiento de su aplicación a veces es pobre dependiendo de la entrada de datos, por ejemplo, para identificar transacciones de db lentas.


Recientemente descubrí EQATEC Profiler http://www.eqatec.com/tools/profiler . Funciona con la mayoría de las versiones .NET y en un montón de plataformas. Es fácil de usar y parte de él es gratis, incluso para uso comercial.


Seleccionamos YourKit Profiler para .NET en mi compañía ya que era el mejor valor (precio vs. característica). Para una pequeña empresa que desea tener licencias flexibles (licencias flotantes), fue una elección perfecta: ANTS era un locket de asientos de desarrollador en ese momento.

Además, nos proporcionó la capacidad de adjuntarnos al proceso en ejecución, lo que no fue posible con dotTrace. Tenga en cuenta que la conexión no es la mejor opción, ya que todo .NET se ralentizará, pero esta fue la única forma de crear perfiles de 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/)


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


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




Perfilador de hormigas . No he usado muchas, pero realmente no tengo ninguna queja sobre las HORMIGAS. La visualización es realmente útil.


[ Divulgación completa ]

Si bien aún no está tan completo 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 objetivo principal es hacer que el rastreo / creación de perfiles sea más fácil y más rápido para todo tipo de aplicaciones (web / Silverlight / desktop).

Si alguna vez ha encontrado que la creación de perfiles y la optimización son intimidantes o lentas con otras herramientas, entonces vale la pena ver JustTrace .