2011-09-25 8 views
6

? Es posible ver los contenidos de la pila y el montón después de cada línea de ejecución. Quiero verlo ya que dará una idea clara sobre la asignación de memoria y la desasignación en .Net. Con su¿Cómo puedo ver objetos dentro de Heap & Stack en C# .Net

Si hay algún documento o enlace que borre mis dudas con su respuesta, comparta.

+1

Eso es un * lote * de datos y es probable que no le diga mucho. (O peor, vendrá quejándose de que nunca recoge basura en las veinte líneas que miró). Si tiene dudas sobre la asignación de memoria y la recolección de basura, haga preguntas y/o busque explicaciones de alto nivel, eso es más probable que ocurra. aclarar las cosas. – delnan

+0

Claro, definitivamente haré esto ahora en adelante – funsukvangdu

Respuesta

2

SOS o PssCor son un buen lugar para comenzar, junto con WinDbg.

Una vez que lo haya resuelto; adjunte WinDbg a su proceso, cargue la extensión del depurador. Por ejemplo:

.load C:\pathtoextensions\psscor4.dll 

Después de eso, puede emitir el !dumpheap o !dumpstack comandos.

La salida de estos dos comandos es muy cruda. !dumpheap -stat le dará una descripción "estadística" de su montón. El tipo, el número asignado y los bytes en total para todas las asignaciones.

Esta no es una tarea súper directa. Llevará bastante tiempo practicar con WinDbg si no lo ha usado antes.

Lo que puede hacer es establecer un punto de interrupción en un método usando !bpmd, y usar los comandos mencionados anteriormente, luego pasar de nuevo usando el comando p y volver a ejecutar los comandos.

Estoy seguro de que hay otras herramientas comerciales como ANTS Profiler o dotTrace que pueden hacer el trabajo, pero no tengo mucha experiencia con ninguna herramienta.

Una vez que haya comenzado, puede hacer (nueva) preguntas más específicas sobre SOS o Psscor.

3

Pila:

var stackInfo = new StackTrace(); 

Heap? No, necesitarías usar un generador de perfiles, depurador o API apropiadas. No es una tarea sencilla. Si lo intentas y tienes dificultades, lo mejor es hacer una pregunta más específica.