.net - dotnet - memory leaks c#
¿Cómo activar GCStress en Windows 7? (1)
Estoy depurando una corrupción de montón de GC y llegué al paso en el que quiero intentar ejecutar el programa en WinDbg + PageHeap + AppVerifier + GCStress.
Encontré en el artículo Fallo de software: módulo de fallas mscorwks.dll, versión 1.1.4322.2379, que puedo habilitar GCStress de esta manera:
reg.exe add "HKLM/SOFTWARE/Microsoft/.NETFramework" /f /v HeapVerify /t REG_DWORD /d 1
reg.exe add "HKLM/SOFTWARE/Microsoft/.NETFramework" /f /v StressLog /t REG_DWORD /d 1
reg.exe add "HKLM/SOFTWARE/Microsoft/.NETFramework" /f /v GCStress /t REG_DWORD /d 3
reg.exe add "HKLM/SOFTWARE/Microsoft/.NETFramework" /f /v FastGcStress /t REG_DWORD /d 2
(Estoy probando este método. Se necesita ejecutar el programa para siempre. Eliminé las dos últimas entradas del registro para que funcione, probablemente algo esté mal con el enfoque en sí).
O el artículo Violación de acceso en .NET 4 Runtime en gc_heap :: garbage_collect sin módulos no administrados describió el otro método:
(DWORD) StressLog = 1
(DWORD) LogFacility = 0xffffffff
(DWORD) StressLogSize = 65536
¿Qué camino es correcto o hay otra forma correcta ?
Busqué GCStress en Koders . Resultó que la mejor manera de entenderlo es mirando el código fuente de .NET :
enum GCStressFlags {
GCSTRESS_NONE = 0,
GCSTRESS_ALLOC = 1, // GC on all allocations and ''easy'' places
GCSTRESS_TRANSITION = 2, // GC on transitions to preemtive GC
GCSTRESS_INSTR_JIT = 4, // GC on every allowable JITed instruction
GCSTRESS_INSTR_NGEN = 8, // GC on every allowable NGEN instruction
GCSTRESS_UNIQUE = 16, // GC only on a unique stack trace
};