2009-09-22 21 views
5

No estoy seguro de si las siguientes preguntas son válidas. Para educarme solo estoy preguntando.C# - ¿Es posible Iterar GC Heap?

(1) ¿Puedo iterar programáticamente el montón de GC de todas las generaciones?

(2) ¿Es posible ver cómo funciona el GC en mi conjunto mediante el lanzamiento de un hilo?

+1

El generador de perfiles de memoria es una herramienta muy útil para comprender qué objetos están en la memoria. –

+0

¿dónde puedo obtener un generador de perfiles de memoria? – user160677

+0

http://msdn.microsoft.com/en-us/library/ms979205.aspx –

Respuesta

7

Las respuestas a las preguntas le son:

  1. Desafortunadamente no, no se puede. El recolector de basura de CLR funciona en un patrón de marca, barrido y compacto, por lo que entre las ejecuciones no hay información sobre el montón (aparte del tamaño del montón o la generación actual de una instancia de tipo específico) que le permita iterar todos los objetos en eso.

  2. La mejor manera de controlar el GC es usar perfmon y mirar (o registrar) el CLR memory counters.

+0

+1 para contadores de memoria perfmon y CLR. – RichardOD

+0

Gracias por la información. – user160677

+0

En realidad, puede)) https://github.com/mumusan/dotnetex/ – Alexus

2

Hace un tiempo estaba buscando en Internet una respuesta a la misma pregunta, pero no encontré ninguna manera de iterar el montón de GC de forma programática.

Si solo necesita ver esta información con fines de depuración, puede iniciar WinDbg y cargar la extensión SOS. que puede usar el comando de extensión! dumpheap para ver exactamente qué objetos están en el montón de GC. también puede usar el modo de perfil de memoria de dotTrace si lo tiene.

+0

Gracias Gracias :) Muchas gracias – user160677

Cuestiones relacionadas