У меня есть приложение C#, которое использует System.Diagnostics.Process для запуска другого exe. Я столкнулся с некоторым примером кода, в котором процесс запускается в блоке try и закрывается в блоке finally. Я также видел пример кода, в котором процесс не закрыт.
Что произойдет, если процесс не закрыт?
Освобождаются ли ресурсы, используемые процессом, при закрытии консольного приложения, создавшего процесс?
Плохо ли открывать много процессов и не закрывать ни один из них в консольном приложении, открытом в течение длительного времени?
Ваше здоровье!





Они будут продолжать работать, как если бы вы их сами запустили.
Процесс - это отдельная сущность. Программное создание процесса во многом похоже на запуск процесса с рабочего стола.
Дескриптор создаваемого вами процесса возвращается только для удобства. Например, чтобы получить доступ к его входным и выходным потокам или (как вы видели), чтобы убить его.
При уничтожении родительского процесса ресурсы не восстанавливаются.
Открывать много процессов плохо только в том случае, если вы открываете так много процессов, что ЦП и ОЗУ не могут с этим справиться!
Когда другой процесс выходы, все ресурсы это высвобождаются, но вы по-прежнему будете удерживать дескриптор процесса (который является указателем на блок информации о процессе), если вы не вызовете Close() по вашей ссылке Process. Я сомневаюсь, что возникнет большая проблема, но вы также можете.Process реализует IDisposable, поэтому вы можете использовать оператор using(...) в C#, который автоматически вызовет Dispose (и, следовательно, Close()) для вас:
using (Process p = Process.Start(...))
{
...
}
Практическое правило: если что-то реализует IDisposable, вы действительно должен вызываете Dispose / Close или используете на нем using(...).
Обратите внимание, что вызов Close для процесса не приводит к завершению процесса.