2010-09-15 14 views
7

Duplicar posibles:
What Are Some Good .NET Profilers?Herramientas para pérdidas de memoria en .Net ejecutable

estoy tratando de probar una aplicación en Windows para pérdidas de memoria. He analizado alternativas a Linux (por ejemplo, Valgrind) y estoy buscando una herramienta similar para Windows. El problema con .Net es que la memoria no se libera de inmediato como en Linux.

Mi conocimiento de .Net es limitado, así que mi problema es que me gustaría utilizar una herramienta que encontraría pérdidas de memoria para un ejecutable de Windows .Net. Idealmente, el programa debería ser capaz de detectar cualquier pérdida de memoria mientras uso la aplicación. ¿Alguien sabe de tal herramienta o tiene alguna sugerencia para resolver este problema?

Gracias por cualquier ayuda con anticipación.


Gracias por las respuestas. ¿Alguien puede decirme si alguno de estos programas le permite ejecutar desde la línea de comandos y generar informes de pérdida de memoria en un archivo de texto?

Gracias

Respuesta

5

Redgate tiene un buen perfilador de memoria se puede descargar here. Incluso viene con una prueba de 14 días. Lo he usado y es muy bueno.

+0

@ Lucas B - ¿Sabe si puede ejecutar esto utilizando un argumento de línea de comando automatizado y la salida a un archivo de texto. – chrissygormley

+0

sí, puede verlo aquí: http://www.red-gate.com/supportcenter/Content.aspx?p=ANTS%20Profiler&c=ANTS_Profiler/help/4.0/AP_startup_parameters.htm&toc=ANTS_Profiler/help/4.0/toc469429.htm –

+0

@ Lucas B - Gracias +1 – chrissygormley

3

Algunos otros ya han publicado buenos enlaces a los perfiles - redginador de redgate es particularmente bueno.

Aquí hay un enlace a un buen artículo en la búsqueda de fugas en .Net:

http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx

Aquí hay un gran blog - el autor es un ingeniero de soporte en la EM (estas personas son realmente buenos programadores que trabajan en windebug todo el día para encontrar problemas). Muchos de sus artículos tratan sobre cómo rastrear las pérdidas de memoria. La mayoría de sus ejemplos son asp.net, pero la mayoría de las técnicas deben aplicarse a aplicaciones de Windows así:

http://blogs.msdn.com/b/tess/archive/2006/01/23/516139.aspx

Además, tenga en cuenta que puede que no tenga una fuga real. Por diseño, el recolector de basura de .Net no libera la memoria de inmediato. Hace colecciones periódicas que se desencadenan por varios eventos (no creo que MS haya publicado una lista completa de las cosas que harán que el recolector de basura se dispare). Sé que uno de los factores desencadenantes son las condiciones de memoria baja, y otro desencadenador puede ser una asignación de memoria. Si nada lo activa, el GC no se acumulará.

Eso significa que puede iniciar una aplicación .NET de Winform, dejar que coma un montón de memoria (y luego soltarla), y luego dejarla reposada toda la noche. Si la computadora ha estado inactiva durante todo el tiempo, es posible que el GC no se haya disparado y que la aplicación aún posea mucha memoria. Cuando algo sucede para desencadenar la recolección, la memoria se liberará. Es muy común que las personas informen que las aplicaciones .net parecen ser lentas para liberar memoria como resultado de este comportamiento.

Adelante y perfil - puede tener una fuga, pero también tenga en cuenta que esto puede ser un comportamiento por diseño. De cualquier manera, buena suerte!

1

Hemos probado muchos de los memoryperfilers para.NET y han llegado a la conclusión de que el .NET memory profiler es el mejor actualmente en el mercado con una buena combinación para facilitar el uso, la cantidad de datos disponibles y el rendimiento.

Cuestiones relacionadas