.net - traduccion - invocar garbage collector c#
¿Cómo iterar en los objetos presentes en el montón administrado de.NET? (2)
Instalar "Herramientas de depuración para Windows".
a. Enlace: http://www.microsoft.com/whdc/devtools/debugging/default.mspx
segundo. Utilizará WinDbg.EXE, el depurador nativo de Windows y SOS.DLL (también conocido como "Son of Strike"), la extensión WinDbg para código administrado.
do. La ubicación de instalación predeterminada es "C: / Archivos de programa / Herramientas de depuración para Windows".
Ejecute su proceso administrado.
Ejecute WinDbg y haga clic en "Archivo -> Adjuntar a un proceso ..."
Seleccione su proceso de la lista.
WinDbg interrumpirá (detendrá) automáticamente la ejecución al adjuntar a su proceso.
Escriba ".load sos.dll" (sí, con el "." Anterior) en la línea de comandos de WinDbg para cargar Son of Strike.
Escriba "! Help" para ver la lista de comandos / características que ofrece Son of Strike.
Escriba "! Traverseheap -xml heap.xml" para volcar el montón de su proceso a heap.xml en el directorio de WinDbg (por ejemplo, C: / Program Files / Debugging Tools for Windows ").
a. Atravesar y tirar el montón a un archivo puede llevar mucho, mucho tiempo. WinDbg publicará " OCUPADO " en su estado e imprimirá "." - s para indicar el progreso.
segundo. En general, heap.xml está estructurado de la siguiente manera:
<ID de tipo>
...
<Objetos>
Cada clase (tipo) contiene una ID y cada objeto contiene su ID de tipo, dirección administrada y tamaño.
Use findstr (símbolo del sistema) contra heap.xml para grep su camino a través del montón, y WinDbg para volcar objetos.
a. Ejemplo: Encuentre el ID de tipo de la clase DataTable.
findstr "DataTable" heap.xml
Salida: <type id = "1002" name = "System.Data.DataTable" />
segundo. Ejemplo: Encuentra todos los objetos DataTable.
findstr "typeid = /" 1002 / "" heap.xml
Salida: <dirección del objeto = "0x0137ECD8" typeid = "1002" size = "296">
do. Ejemplo: volcar un objeto DataTable.
- (En WinDbg)! Dumpobj 0137ecd8
re. Ejemplo: volcar un objeto miembro. La dirección de un objeto miembro se almacena en el campo "Valor" del volcado de objetos que contiene el miembro.
- ! dumpobj <"Valor">
.
Añada, si desea rastrear asignaciones de objetos grandes, a continuación se explica cómo dividir el CLR en una asignación LOH. Al romper, presione ''k'' para ver la pila de llamadas.
Ejecute WinDbg y adjúntelo como se indica a continuación.
- Agregue el servidor de símbolos de Microsoft a la ruta del símbolo:
- .sympath srv c: / windows / symbols http://msdl.microsoft.com/download/symbols
- Reload symbols:
- .recargar
- Recarga la cuña de tiempo de ejecución:
- .reload / f mscorwks.dll
- Desglose de asignaciones UP:
- bp mscorwks! WKS :: gc_heap :: allocate_large_object
- Romper las asignaciones de MP:
- bp mscorwks! SVR :: gc_heap :: allocate_large_object
- Confirmar puntos de corte:
- licenciado en Derecho
- Currículum:
- gramo
¿Hay alguna manera en la API de .NET de iterar en los objetos administrados presentes en el montón administrado?
Nos gustaría agregar una rutina en algunos puntos de nuestro programa que verifique la presencia de algunos objetos en el montón administrado.
Tendría que usar la API de depuración / creación de perfiles para hacer esto, que no recomendaría para una aplicación "normal".