如果我不这样做会发生什么;t关闭C#控制台应用程序中的System.Diagnostics.Process

本文关键字:应用程序 控制台 Process Diagnostics System 关闭 这样做 什么 如果 | 更新日期: 2023-09-27 17:47:49

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

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

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

在一个长时间打开的控制台应用程序中,打开很多进程却不关闭其中的任何一个,这不好吗?

干杯!

如果我不这样做会发生什么;t关闭C#控制台应用程序中的System.Diagnostics.Process

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

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

根据经验:如果某个东西实现了IDisposable,那么您真的应该调用Dispose/Close或在其上使用using(...)

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

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

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

当父进程终止时,不会回收资源。

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