代码之家  ›  专栏  ›  技术社区  ›  Billy ONeal IS4

不调用Process.Close()是否有严重问题?

  •  1
  • Billy ONeal IS4  · 技术社区  · 14 年前

    Close()

    Process 正在监视一个几乎立即终止的控制台应用程序。。。

    比利3

    4 回复  |  直到 14 年前
        1
  •  3
  •   Adam Robinson    14 年前

    但请注意 Close 尝试终止进程。要做到这一点,你必须打电话 CloseMainWindow() (对于GUI应用程序)或 Kill()

    这个 Process 类实现 IDisposable Dispose 一旦你完成了这个物体。然而,对于许多这样的类,面向公众的版本 关闭

    using 阻止。这将自动调用 处置

    例如:

    using(System.Diagnostics.Process process = new System.Diagnostics.Process())
    {
        // set your properties and launch it
        // wait for it to exit if you want to, or just let it continue to run
    }
    

    System.Diagnostics.Process process = new System.Diagnostics.Process();
    
    try
    {
        // set your properties and launch it
        // wait for it to exit if you want to, or just let it continue to run
    }
    finally
    {
        process.Close();
    }
    

    (注意,我说的是功能对等,而不是语义对等;事实上 块将自己的对象句柄作为 可识别的 处置 ,不是 关闭 . 但是,这与这个问题无关。)

        2
  •  2
  •   Reed Copsey    14 年前

    不,不一定。

    通常,最好总是调用Dispose()(或包装在using语句中)任何IDisposable,例如流程实例。但是,如果写得正确,GC最终将在终结器中执行所有清理,即使您没有这样做。

    根据所分配的资源,这可能会在一段时间内对内存/资源造成严重的“冲击”,也可能不会。在一个进程的情况下,您将保持一个进程句柄(相对较小),直到GC收集并完成对象,这可能不会对您的程序整体产生太大的影响。

        3
  •  0
  •   Tim Robinson    14 年前

    这不是致命的-垃圾收集器会调用 Process 的终结器,对象的资源将以这种方式清理。

    Close 直接,或将代码包装在 using

        4
  •  0
  •   Logan Capaldo    14 年前

    Close Dispose )将释放(可能授予相对少量的)操作系统范围的资源。这些都是您与系统上的每个其他进程共享的内容,因此作为一个好公民,您应该尽可能及时地发布它们。