Que se passe-t-il si je ne ferme pas un System.Diagnostics.Process dans mon application console C #?

J’ai une application C # qui utilise un System.Diagnostics.Process pour exécuter un autre fichier .exe. J’ai rencontré un exemple de code dans lequel le processus est démarré dans un bloc try et fermé dans un bloc finally. J’ai aussi vu des exemples de code dans lesquels le processus n’est pas fermé.

Que se passe-t-il lorsque le processus n’est pas fermé?

Les ressources utilisées par le processus sont-elles récupérées lorsque l’application de la console qui a créé le processus est fermée?

Est-il mauvais d’ouvrir de nombreux processus sans fermer aucun d’entre eux dans une application console ouverte pendant de longues périodes?

À votre santé!

Lorsque l’autre processus se termine , toutes ses ressources sont libérées, mais vous conserverez toujours un descripteur de processus (qui est un pointeur sur un bloc d’informations sur le processus), à moins que vous n’appeliez Close() sur votre référence de Process . Je doute qu’il y ait beaucoup de problème, mais vous pouvez aussi bien . Process implémente IDisposable afin que vous puissiez utiliser l’instruction C # à l’ using(...) , qui appelle automatiquement Dispose (et donc Close() ) pour vous:

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

En règle générale: si quelque chose implémente IDisposable , vous devez vraiment appeler Dispose / Close ou utiliser using(...) dessus.

Ils continueront à fonctionner comme si vous les aviez démarrés vous-même.

Un processus est une entité autonome. Programmer la création d’un processus revient en gros au lancement d’un processus à partir de votre bureau.

Le descripteur d’un processus que vous créez n’est renvoyé que par souci de commodité. Par exemple, pour accéder à ses stream d’entrée et de sortie ou (comme vous l’avez vu) pour le tuer.

Les ressources ne sont pas récupérées lorsque le processus parent est tué.

La seule fois où il est mauvais d’ouvrir beaucoup de processus, c’est si vous en ouvrez tellement que le processeur et la RAM ne peuvent pas le gérer!