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