2008-10-08 13 views
5

Tengo una aplicación C# que utiliza 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 si no cierro System.Diagnostics.Process en mi aplicación de consola C#?

¿Qué sucede cuando el proceso no está cerrado?

¿Los recursos utilizados por el proceso se reclaman cuando se cierra la aplicación de consola que creó el proceso?

¿Es malo para abrir una gran cantidad de procesos y no cerrar ninguna de ellas en una aplicación de consola que está abierta durante largos períodos de tiempo?

¡Salud!

Respuesta

14

Cuando el otro proceso sale, todos sus se liberan recursos, pero todavía serán aferran a un identificador de proceso (que es un puntero a un bloque de información sobre el proceso) a menos que llame Close() en su referencia Process. Dudo que haya mucho problema, pero es posible que también. Process implementa IDisposable esta manera puede utilizar using(...) sentencia en C# 's, que se llamará automáticamente Dispose (y por lo tanto Close()) para usted:

using (Process p = Process.Start(...)) 
{ 
    ... 
} 

Como regla general: si algo implementa IDisposable, realmente debe llamada Dispose/Close o use using(...) en él.

+4

Tenga en cuenta que al llamar Cerrar en un proceso no hace que el proceso salga. –

1

Continuarán ejecutándose como si las hubiera iniciado usted mismo.

1

Un proceso es una entidad independiente. Programar crear un proceso es prácticamente lo mismo que iniciar un proceso desde su escritorio.

El identificador de un proceso que crea solo se devuelve para mayor comodidad. Por ejemplo, para acceder a sus flujos de entrada y salida o (como viste) para matarlo.

Los recursos no se recuperan cuando se cancela el proceso principal.

La única vez que es malo para abrir una gran cantidad de procesos es si abre tantas que la CPU y la memoria RAM no pueden manejarlo!

Cuestiones relacionadas