我感兴趣的是在通过检查 Process.HasFinished 属性等待进程终止时是否必须调用 Process.Refresh()?
我有一段代码可以在没有 Process.Refresh() 调用的情况下正常工作,但是我很好奇天气这是巧合吗?我可以看到一个 msdn 示例有 Process.Refresh() 调用...
如果没有必要,并且 Process.HasExited 是我需要的唯一属性,那么调用 Process.Refresh() 有什么好处吗?如果没有,是否有原因出现在 msdn 示例中?
谢谢您的回答。
正如您所注意到的,MSDN 并没有完全指定缓存哪些信息,因此需要使用Process.Refresh()
.
在使用反射器对类进行简短(并且可能不完整)分析之后,似乎HasExited
每次访问该属性时都会“计算”该属性。Refresh
似乎主要是强制更新内部ProcessInfo
对象,其中包含诸如内存消耗、句柄信息等信息。
另一方面,Refresh
它并没有真正获取所有这些信息,它只是丢弃内部缓存。仅当您访问任何属性时才会重新获取信息。所以Refresh
几乎没有性能开销。因此Refresh
,如果 Microsoft 决定HasExited
在将来更改实现,调用它可能更安全。
归档时间: |
|
查看次数: |
2828 次 |
最近记录: |