.net debugging garbage-collection windbg

Disparar una colección de basura.NET externamente



debugging garbage-collection (4)

Bueno ... ahí está la ventana inmediata. Si tiene el lujo de adjuntar al proceso, supongo que puede GC.Colgar manualmente en la ventana inmediata.

Pregunta más importante: ¿por qué querrías inducir GC.Collect manualmente? Es un hábito repugnante e indicativo de problemas de diseño mucho más grandes.

¿Hay alguna manera de activar una recolección de basura en un proceso .NET desde otro proceso o desde dentro de WinDBG?

Existen los Asistentes de Depuración Administrados que obligan a una colección a medida que se mueve a través de un límite nativo / administrado, y AQTime parece tener un botón que sugiere que lo hace, pero no puedo encontrar ninguna documentación sobre cómo hacerlo.


Si expone una función / objeto a través de la comunicación remota, eso podría hacerse con bastante facilidad.


La respuesta de John Cocktoastan para usar GC.Collect cuando en Visual Studio es la mejor opción si existe.

Todavía no puedo encontrar una alternativa para hacer realmente la colección bajo WinDBG pero dando un paso atrás al problema de "¿Cuánta memoria es reclamable?" (vea mi comentario a la respuesta de John) Creo que hay una alternativa al usar una búsqueda con guión ( PowerDBG ?) a través de una combinación de! DumpHeap y! GCRoot para encontrar los identificadores no enraizados y totalizar el espacio utilizado (básicamente emular el algoritmo que el GC lo haría usando el depurador). Pero desde que pensé en esto, no he tenido uno de estos errores, así que no he intentado escribir el código para hacerlo.


Respondido en otra pregunta :

Básicamente, use PerfView :

PerfView.exe ForceGC [ProcessName | Process ID]

No es para uso de producción.