Что произойдет, если я не закрою System.Diagnostics.Process в своем консольном приложении C #? - PullRequest
4 голосов
/ 09 октября 2008

У меня есть приложение на C #, которое использует System.Diagnostics.Process для запуска другого исполняемого файла. Я натолкнулся на пример кода, где процесс запускается в блоке try и закрывается в блоке finally. Я также видел пример кода, где процесс не закрыт.

Что происходит, когда процесс не закрыт?

Исправлены ли ресурсы, используемые процессом, когда консольное приложение, создавшее процесс, закрыто?

Разве плохо открывать много процессов и не закрывать ни один из них в консольном приложении, которое работает в течение длительного времени?

ура!

Ответы [ 3 ]

13 голосов
/ 09 октября 2008

Когда другой процесс выходит из , все его ресурсы освобождаются, но вы все равно будете держаться за дескриптор процесса (который является указателем на блок информации о процесс), если вы не позвоните Close() по ссылке Process. Я сомневаюсь, что будет много проблем, но вы также можете . Process реализует IDisposable, поэтому вы можете использовать оператор C # using(...), который автоматически вызовет Dispose (и, следовательно, Close()) для вас:

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

Как правило: если что-то реализует IDisposable, вам действительно следует вызвать Dispose / Close или использовать using(...) на нем.

1 голос
/ 09 октября 2008

Процесс - это отдельная сущность. Программное создание процесса во многом аналогично запуску процесса с рабочего стола.

Дескриптор создаваемого вами процесса возвращается только для удобства. Например, чтобы получить доступ к входным и выходным потокам или (как вы видели) убить его.

Ресурсы не восстанавливаются при уничтожении родительского процесса.

Единственный раз, когда плохо открывать множество процессов, это если вы открываете так много, что ЦП и ОЗУ не могут это обработать!

1 голос
/ 09 октября 2008

Они будут продолжать работать так, как будто вы сами их запустили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...