Existe una opción, aunque no tengo idea de si eso es "seguro para la producción". Es decir, no sé qué tan alto es el riesgo, que el proceso objetivo se cuelga. Pero si se usa para la resolución de problemas y/o análisis, puede ser útil.
Puede utilizar PerfView con el propósito:
PerfView.exe ForceGC [ProcessName | Process ID]
O citar el PerfView.exe /?
de salida:
... Uso: PerfView ForceGC Proceso
Fuerza una GC en el proceso especificado
Parámetros: Proceso El ID del proceso o Nombre del proceso (Exe sin extensión) del proceso para forzar un GC. ...
El "problema" es que aquí, que esto va a abrir una nueva ventana de consola y, después de que se hace esto, le pedirá que cerrar esta ventana.
PerfView.exe, sin embargo, volcará una gran cantidad de ejecutables en %APPDATA%\PerfView\_version_
que se empaquetan dentro del ejecutable PerfView.exe como recursos.
Así, una vez que se ha ejecutado el comando PerfView.exe, puede invocar la herramienta HeapDump.exe
manualmente (en mi caso el cuadro de x64 y con el ID de proceso 15396):
cd C:\Users\MyUserName\AppData\Roaming\PerfView\VER.2014-02-04.09.06.52.000\AMD64
HeapDump.exe /ForceGC 15396
Ejemplo de salida será similar a:
Loading the ETWClrProfiler.
Turning on debug privilege.
Highest Runtime in process is version v4.0.30319
0,0s: Trying to attach a profiler.
0,1s: Done Attaching ETLClrProfiler ret = 0
Attached ETWClrProfiler.
0,1s: Enabling JScript Heap Provider
0,1s: Enabling EtwClrProfiler
0,1s: Enabling CLR GC events
0,1s: Requesting a JScript GC
0,1s: Requesting a DotNet GC
4,0s: .NET GC Starting at 0,15s.
4,0s: .NET GC stats, at 0,16s Survived 2221152.
6,0s: .NET GC complete at 0,17s.
6,0s: Triggered .NET GC, No JScript heap detected
6,1s: Requesting ETWClrProfiler unload.
6,1s: Shutting down ETW session
[ 6,1s: Done forcing GCs success=True]
Tenga en cuenta que lo anterior es AFAIK uso no oficial de la herramienta y puede dejar de funcionar con nuevas versiones. Y, por supuesto, PerfView puede hacer mucho más que solo forzar un GC (inicie here).
Internamente, los usos anteriores, la ICorProfilerInfo::ForceGC interfaz de perfiles/método que viene con el CLR (source. Escribir una herramienta "simple"/"independiente" para ese propósito es, pues, no está completamente fuera de la cuestión. Tarea no trivial no la . menos
actualización: PerfView como tal es ahora open source y la herramienta anterior hablaba de is part of it En caso de que usted es curioso
para recoger la basura desde donde –
de algún proceso quiero forzar GC..?. para algunos diagnósticos. No es parte de mi código. – Kamarey
Us Respuesta eless: dentro de PowerShell ejecuta '[gc] :: Collect (0)' para ejecutar una colección gen 0 en el proceso. Pero, ¿por qué querría uno hacer esto? – Richard