如果我不关闭C#控制台应用程序中的System.Diagnostics.Process,会发生什么情况?
问题描述:
我有一个C#应用程序,它使用System.Diagnostics.Process来运行另一个exe。我遇到了一些示例代码,其中进程在try块中启动并在finally块中关闭。我还看到过程未关闭的示例代码。如果我不关闭C#控制台应用程序中的System.Diagnostics.Process,会发生什么情况?
当进程未关闭时会发生什么?
当创建进程的控制台应用程序关闭时,进程使用的资源是否被回收?
打开大量进程并且在长时间打开的控制台应用程序中关闭它们中的任何一个都不好吗?
干杯!
答
当其他工艺退出,所有的其资源被释放了,但你仍然会持有到一个进程句柄(这是一个指向有关过程的信息块),除非你调用Close()
在您的Process
参考。我怀疑会有太多的问题,但你可能还有。 Process
实现IDisposable
所以你可以使用C#的using(...)
声明,它会自动调用Dispose
(因此Close()
)为您:
using (Process p = Process.Start(...))
{
...
}
作为一个经验法则:如果事情实现IDisposable
,你真的应该呼叫Dispose
/Close
或使用using(...)
就可以了。
答
他们将继续运行,就像你自己开始他们一样。
答
一个进程是一个独立的实体。 以编程方式创建进程与从桌面启动进程非常相似。
您创建的进程的句柄仅返回以方便使用。例如访问它的输入和输出流或者(如你所见)来杀死它。
当父进程被终止时,资源不会被回收。
打开大量进程的唯一时间是如果打开太多以至于CPU和RAM无法处理它!
请注意,在进程上调用Close并不会导致进程退出。 – 2008-10-09 00:35:38