c# - 如果我不在我的 C# 控制台应用程序中关闭 System.Diagnostics.Process,会发生什么情况?

标签 c# process

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

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

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

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

干杯!

最佳答案

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

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

根据经验:如果某物实现了IDisposable,您确实应该调用Dispose/Close 或在上面使用 using(...)

关于c# - 如果我不在我的 C# 控制台应用程序中关闭 System.Diagnostics.Process,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185314/

相关文章:

java - 如何启动第二个 Java 进程?

c# - Azure DevOps API 创建工作项返回 404 错误

C# List<string> 排序问题

C# - 将 null 插入到 SQL Compact Edition 表中

c - 如何理解 child 因为 parent 的内存而死亡,即使发送的信号是 "9"

c# - 限制 .NET 进程可以使用的最大 RAM 量?

c# - 令人困惑的线程行为

c# - 在 C# DLL 中创建入口点以从 WIX 调用

java - 使用 bufferreader 在 java 代码中读取 --traceroute 命令时搜索特定单词

c - 在 linux 中读写 PIPE