如果我不在我的C#控制台应用程序中关闭System.Diagnostics.Process会发生什么?

MrD*_*ase 4 c# process

我有一个C#应用程序,它使用System.Diagnostics.Process来运行另一个exe.我遇到了一些示例代码,其中进程在try块中启动并在finally块中关闭.我还看到了进程未关闭的示例代码.

当流程未关闭时会发生什么?

创建流程的控制台应用程序关闭时,是否回收了流程使用的资源?

在长时间打开的控制台应用程序中打开大量进程并且不关闭任何进程是不是很糟糕?

干杯!

Dun*_*art 13

当其他进程退出,所有资源都被释放了,但你仍然会持有到一个进程句柄(这是一个指向有关过程的信息块),除非你叫Close()上你的Process参考.我怀疑会有很多问题,但你也可以.Process实现IDisposable所以你可以使用C#的using(...)语句,它会自动调用Dispose(因此Close()):

using (Process p = Process.Start(...))
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

根据经验:如果某些东西实现了IDisposable,你真的应该调用Dispose/ Close或使用using(...)它.

  • 请注意,在进程上调用Close不会导致进程退出. (4认同)