4

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

当进程没有关闭时会发生什么?

当创建进程的控制台应用关闭时,进程使用的资源是否被回收?

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

干杯!

4

3 回答 3

13

当另一个进程退出时,的所有资源都被释放,但除非你调用Close()你的Process引用,否则你仍然会持有一个进程句柄(它是一个指向有关进程的信息块的指针) 。我怀疑会有很多问题,但你也可以Process实现IDisposable,因此您可以使用 C# 的using(...)语句,它将自动为您调用Dispose(因此Close()):

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

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

于 2008-10-08T23:25:44.057 回答
1

它们将继续运行,就像您自己启动它们一样。

于 2008-10-08T23:19:07.923 回答
1

进程是一个独立的实体。以编程方式创建进程与从桌面启动进程非常相似。

您创建的进程的句柄只是为了方便而返回。例如访问它的输入和输出流或(如您所见)杀死它。

当父进程被杀死时,资源不会被回收。

打开大量进程的唯一不好的情况是,如果您打开的进程太多以至于 CPU 和 RAM 无法处理它!

于 2008-10-08T23:23:08.290 回答