Uso Visual Studio para tomar una instantánea de la memoria de mi aplicación.
Tengo algunas preguntas sobre la comprensión de los datos que obtuve. Después de capturar la instantánea de la memoria, filtro una de mi clase, digamos MyClassPanel. Solo uso MyClassPanel en mis archivos xmal.
¿Por qué las 'Rutas a la raíz' para MyClassPanel son todas 'MyClassPanel [RefCount Handle, Count:1]'? (es decir, el mismo nombre pero con una cadena [RefCount Handle al final] y un valor de recuento diferente) ¿qué significa esto? En otra clase, filtro, veo que las 'Rutas a la raíz' son nombres de clase diferentes.
Tengo 24 MyClassPanel (del conteo en la tabla superior). Y en la columna 'Recuento de referencias' en la tabla inferior, cuando los sumo, son 24.
¿Es ese siempre el caso? Creo que 'Recuento' y 'Recuento de referencias' significan cosas diferentes. En este caso, se suman. ¿Esto tiene sentido?

La vista Paths to Root muestra las referencias a este tipo evitando que se recopile como basura. Dado que su clase es una página Xaml, la referencia que mantiene activa la clase es un controlador CLR para la página Xaml. Estos aparecen como RefCount Handle.
De hecho, el conteo y el conteo de referencia no son lo mismo. El recuento es el número de instancias, el recuento de referencias es el número de referencias. Debido a que cada instancia en su caso solo tiene una referencia, tiene sentido que se sumen.
Para más información:
No soy un gran admirador del analizador de instantáneas de Visual Studio. Hay bastantes complicaciones disponibles si la finalización no se ejecuta correctamente antes de tomar la instantánea. No estoy seguro de cómo Visual Studio maneja eso. Sin embargo, la instantánea que ha proporcionado tampoco tiene mucho sentido para mí.
Le sugiero que descargue el analizador de memoria ANTS e investigue esto. Viene con un período de prueba razonable. Al usar eso, podrá ver todas las referencias a cada instancia usando su 'Gráfico de retención'. Le mostrará específicamente qué instancias mantienen la referencia a sus objetos y también le mostrará qué objetos han implementado Dispose pero no han llamado. Supongo que proporcionará más apoyo para encontrar la causa raíz de este problema.
Eche un vistazo al tutorial de las páginas a continuación
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/walkthrough http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/