Tengo una aplicación WPF que, entre otras cosas, muestra una gran cantidad de imágenes, grandes y pequeñas. Mi problema es que la aplicación usa mucha memoria y no sé de dónde viene.¿A dónde fue mi memoria? Conteo de bytes privados grandes
El escenario, cuando haciendo hincapié en la aplicación de algunos que consiguen este gráfico de Monitor de rendimiento:
http://www.imagechicken.com/uploads/1244548604007097000.jpg
La gran línea de negro es Proceso \ bytes privados y las otras líneas son los contadores de CLR MEM (el rosa es total bytes comprometidos)
en números en el gráfico son:
bytes privados ~ 350 Mb
bytes asignados ~ 100 Mb
he estado cavando alrededor de un lote con WinDbg y otras herramientas, y todos ellos informan de que el pila administrada se comporta (pila! Informes eeheap total gestionado alrededor de 100 Mb)
He estado hurgando con aplicaciones como LeakDiag, LDGrapher pero no encontró nada.
Entonces, finalmente a mi pregunta, ¿cómo procedo para saber hacia dónde va mi memoria?
Incluso al solo iniciar la aplicación se usan 100Mb en bytes comprometidos pero 190Mb en bytes privados.
Referencias:
He leído mucho acerca de esto, entre otros en los grandes sitios:
Tess Ferrandez: http://blogs.msdn.com/tess/archive/2009/02/27/net-memory-leak-reader-email-are-you-really-leaking-net-memory.aspx
Rico Mariani: http://blogs.msdn.com/ricom/archive/2004/12/10/279612.aspx
MSDN mag: http://msdn.microsoft.com/en-us/magazine/cc163528.aspx
Gracias por las respuestas hasta ahora. Por lo tanto, para aclarar,! Eeheap,! Dumpheap, gcroot etc. todos informan de las cosas que componen los 100Mb, de lo que estoy tratando de deshacerme es de la otra memoria, los 250 MB adicionales. – andyhammar
Actualización - con VADUMP: Informes "Gran conjunto de trabajo total" de 236 Mb, "Otros datos" como 196 Mb. ¡Mientras tanto! Eeheap informa "tamaño del montón de GC" en 107336836. ¿Cuál es esta diferencia? – andyhammar
'Otros datos' incluye el montón de GC junto con otros datos :) No estoy seguro de qué más hay allí, pero es seguro suponer que son los datos de tiempo de ejecución requeridos por el CLR. –