使用C#4.0,我创建了一个System.Diagnostics.Process
,我希望花费很短的时间来运行。如果由于某种原因,该过程在一段时间后没有退出(例如,我称之为.WaitForExit(timeout)
并且返回值为false
),我需要清理。我已经决定在这种特殊情况下使用.Kill()
是安全的(没有我担心腐败的数据结构)。
鉴于此设置,我是否还需要调用进程的.Close()
方法?如果是,我应该在.Close()
之前或之后致电.Kill()
吗?
答案 0 :(得分:13)
System.Diagnostics.Process
通过IDisposable
类实施Component
,受保护的Dispose(bool)
方法调用Close()
。在完成这些资源时,通常认为处理一次性资源是一种好习惯,因为这将立即释放与该类相关的任何资源(无需等待GC运行)。
所以回答你的问题:
是的,请直接致电Close()
方法或通过C#Dispose()
结构致电using
,如下所示。
using(Process proc = CreateProcess())
{
StartProcess(proc);
if (!proc.WaitForExit(timeout))
{
proc.Kill();
}
}
答案 1 :(得分:12)
Process.Kill()
和Process.Close()
都在内部调用与该进程关联的私有SafeProcessHandle对象上的Close()
。但是,Process.Close()
也明确重置了其他几个内部成员。
由于流程实现了IDisposable
,因此在完成后应始终在其上调用Close()
,或将其包装在using
块中。