我有一个C#应用程序,它使用System.Diagnostics.Process来运行另一个exe。我遇到了一些示例代码,其中进程在try块中启动并在finally块中关闭。我还看到了没有关闭进程的示例代码。
当流程未关闭时会发生什么?
创建流程的控制台应用程序关闭时,是否回收了流程使用的资源?
在长时间打开的控制台应用程序中打开大量进程并且不关闭任何进程是不是很糟糕?
干杯!
答案 0 :(得分:13)
当其他进程退出时,所有其资源都被释放,但您仍然会保留一个进程句柄(这是指向一个块的指针)有关此流程的信息,除非您在Close()
引用上致电Process
。我怀疑会有很多问题,但你也可以。Process
实现IDisposable
所以你可以使用C#的using(...)
语句,它会自动调用Dispose
(因此Close()
)代表您:
using (Process p = Process.Start(...))
{
...
}
根据经验:如果某些内容实现了IDisposable
,那么您应调用Dispose
/ Close
或使用using(...)
。
答案 1 :(得分:1)
他们将继续像你自己开始一样运行。
答案 2 :(得分:1)
流程是一个独立的实体。 以编程方式创建流程与从桌面启动流程非常相似。
只有为方便起见,才会返回您创建的进程的句柄。例如,访问它的输入和输出流或(如你所见)杀死它。
父进程被终止后,资源不会被回收。
唯一一次打开大量进程是不好的,如果你打开这么多,CPU和RAM都无法处理它!