Pregunta

Me gustaría usar algo como CLR Profiles en .Net 2.0 para ver qué objetos ocupan más espacio en el montón en un momento dado (de un proceso de trabajo ASP.Net).

Sin embargo, CLR Profiler solo me permite INICIAR una aplicación, no adjuntarla a una existente.Supongo que esto se debe a que rastrea las asignaciones y también el GC, pero eso no me interesa mucho.Simplemente me gustaría algo que tome una instantánea del estado actual del montón y me muestre qué hay y cuántos objetos de cada tipo hay, y cuántos bytes en total utiliza cada tipo de objeto.

¿Algunas ideas?

¿Fue útil?

Solución

Perfilador de memoria .Net es exactamente lo que necesitas.No es gratis pero hay una versión de prueba.De hecho, utilicé la prueba para encontrar filtraciones en nuestro último proyecto.Una característica notable es:

Identifique fácilmente las fugas de memoria recolectando y comparando instantáneas de la memoria .NET

Creo que esto es lo que buscas.

Otros consejos

  • Adjuntar un depurador

cdb-p

  • cargar extensiones del depurador .net

.loadby sos mscorwks

  • volcar el montón en un formato que CLRProfiler comprenda

!TraverseHeap montón.txt

  • desconectar el depurador

qd

  • cargar heap.txt en la aplicación clrprofiler

Este artículo de MSDN habla sobre cómo usar CLR Profiler gratuito para comparar con instancias de la pila.Tienes razón en que actualmente no puedes adjuntar CLR Profiler a un proceso en ejecución (el artículo explica por qué), pero, por si sirve de algo, parece que pronto podrás hacerlo.

¿Has mirado RedGates .NET Profiler?

Ha pasado un tiempo desde que lo usé, pero estoy seguro de que puedes adjuntarlo a cualquier proceso CLR en cualquier momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top