¿Qué hace Process.Dispose () en realidad?

En la class Process C # class Process hereda de la class Component que implementa IDisposable y entonces puedo llamar a Dispose() en cualquier objeto de Process . ¿Realmente tengo que hacerlo? ¿Cómo sé si realmente tengo que hacerlo?

Supongamos que tengo el siguiente código:

  var allProcesses = System.Diagnostics.Process.GetProcesses(); var processesNames = processes.Select( p => p.ProcessName ); // output process names here 

Ahora parece que tengo una matriz de objetos de Process y tengo que try-finally recorrer la matriz y Dispose() cada objeto. Eso definitivamente es un montón de código adicional.

¿Qué hace ese Dispose() para los objetos Process ? ¿Realmente necesito Dispose() cada objeto de Process y cómo puedo decidir si debo hacerlo?

¿Realmente necesito Dispose() cada objeto de Process y cómo puedo decidir si debo hacerlo?

Sí, debes eliminarlos. Tenga en cuenta este texto en la documentación de Process :

Un proceso de sistema se identifica de forma única en el sistema por su identificador de proceso. Al igual que muchos recursos de Windows, un proceso también se identifica por su identificador, que puede no ser exclusivo en la computadora. Un manejador es el término genérico para un identificador de un recurso. El sistema operativo persiste en el identificador del proceso, al cual se accede a través de la propiedad Manejar del componente Proceso, incluso cuando el proceso ha finalizado. Por lo tanto, puede obtener la información administrativa del proceso, como ExitCode (normalmente cero para el éxito o un código de error distinto de cero) y ExitTime. Los mangos son un recurso extremadamente valioso, por lo que los mangos con fugas son más virulentos que la filtración de memoria.

Entonces, si no los Dispose , potencialmente está filtrando las asas (hasta que sean basura recolectada, pero el objective de Dispose es permitir la limpieza temprana de los recursos)


Tenga en cuenta, también, que la misma documentación indica que el Process invalida el Dispose(bool) , otra pista de que realmente hace algo cuando se llama a Dispose .

de MSDN: http://msdn.microsoft.com/en-us/library/3cc9y48w(v=vs.80).aspx

Llame a Dispose cuando haya terminado de usar el Componente. El método Dispose deja el Componente en un estado inutilizable. Después de llamar a Dispose, debe liberar todas las referencias al Component para que el recolector de basura pueda recuperar la memoria que el Componente estaba ocupando.