如果我用.Kill()杀死System.Diagnostics.Process,我是否还需要调用.Close()?

使用C#4.0,我创建了一个System.Diagnostics.Process ,我希望它能够花费很短的时间来运行。 如果由于某种原因,该过程在一段时间后没有退出(例如,我已经调用.WaitForExit(timeout)并且返回值为false ),我需要清理。 我已经决定在这种特殊情况下使用.Kill()是安全的(没有数据结构我担心会破坏)。

鉴于此设置,我是否还需要调用Process的.Close()方法? 如果是这样,我应该在.Kill()之前或之后调用.Close() .Kill()吗?

System.Diagnostics.Process通过Component类实现IDisposable ,受保护的Dispose(bool)方法调用Close() 。 在完成这些资源时,通常认为处理一次性资源是一种好习惯,因为这会立即释放与该类相关的任何资源(无需等待GC运行)。

所以回答你的问题:

是的,请通过直接调用Dispose()方法或通过C# using构造调用Close() ,如下所示。

 using(Process proc = CreateProcess()) { StartProcess(proc); if (!proc.WaitForExit(timeout)) { proc.Kill(); } } 

Process.Kill()Process.Close()都在内部调用与进程关联的私有SafeProcessHandle对象上的Close() 。 但是, Process.Close()也显式重置了其他几个内部成员。

由于Process实现了IDisposable ,因此在完成后应始终对其执行Close() ,或将其包装在using块中。