正在调用 Process.HasFinished 所需的 Process.Refresh()

Dav*_*jak 1 c# process

我感兴趣的是在通过检查 Process.HasFinished 属性等待进程终止时是否必须调用 Process.Refresh()?

我有一段代码可以在没有 Process.Refresh() 调用的情况下正常工作,但是我很好奇天气这是巧合吗?我可以看到一个 msdn 示例有 Process.Refresh() 调用...

如果没有必要,并且 Process.HasExited 是我需要的唯一属性,那么调用 Process.Refresh() 有什么好处吗?如果没有,是否有原因出现在 msdn 示例中?

谢谢您的回答。

Mar*_*ner 5

正如您所注意到的,MSDN 并没有完全指定缓存哪些信息,因此需要使用Process.Refresh().

在使用反射器对类进行简短(并且可能不完整)分析之后,似乎HasExited每次访问该属性时都会“计算”该属性。Refresh似乎主要是强制更新内部ProcessInfo对象,其中包含诸如内存消耗、句柄信息等信息。

另一方面,Refresh它并没有真正获取所有这些信息,它只是丢弃内部缓存。仅当您访问任何属性时才会重新获取信息。所以Refresh几乎没有性能开销。因此Refresh,如果 Microsoft 决定HasExited在将来更改实现,调用它可能更安全。