visual - system.diagnostics c#
¿Qué sucede si no cierro System.Diagnostics.Process en mi aplicación de la consola C#? (3)
Tengo una aplicación C # que usa un System.Diagnostics.Process para ejecutar otro exe. Me encontré con un código de ejemplo donde el proceso se inicia en un bloque try y se cierra en un bloque finally. También vi código de ejemplo donde el proceso no está cerrado.
¿Qué sucede cuando el proceso no está cerrado?
¿Los recursos utilizados por el proceso son recuperados cuando se cierra la aplicación de la consola que creó el proceso?
¿Es malo abrir muchos procesos y no cerrar ninguno en una aplicación de consola abierta durante largos períodos de tiempo?
¡Aclamaciones!
Continuarán funcionando como si los hubieras comenzado tú mismo.
Un proceso es una entidad independiente. Programar crear un proceso es prácticamente lo mismo que iniciar un proceso desde su escritorio.
El control de un proceso que usted crea solo se devuelve por conveniencia. Por ejemplo, para acceder a sus flujos de entrada y salida o (como viste) para matarlo.
Los recursos no se recuperan cuando se mata el proceso principal.
¡La única vez que es malo abrir muchos procesos es abrir tantos que la CPU y la RAM no puedan manejarlo!
Cuando el otro proceso finaliza , todos sus recursos se liberan, pero aún estará reteniendo un identificador de proceso (que es un puntero a un bloque de información sobre el proceso) a menos que llame a Close()
en su referencia de Process
. Dudo que haya mucho problema, pero tú también puedes . Process
implementa IDisposable
para que pueda usar C # using(...)
instrucción using(...)
, que llamará automáticamente a Dispose
(y, por lo tanto, Close()
) por usted:
using (Process p = Process.Start(...))
{
...
}
Como regla general: si algo implementa IDisposable
, debe llamar a Dispose
/ Close
o usar using(...)
en él.