Как вы заметили, MSDN точно не указывает, какая информация кэшируется и, следовательно, должна обновляться с использованием Process.Refresh()
.
После короткого (и, вероятно, неполного) анализа класса с использованием отражателя кажется, что свойство HasExited
"вычисляется" каждый раз, когда к нему обращаются. Refresh
кажется, в основном, для принудительного обновления внутреннего объекта ProcessInfo
, который содержит такую информацию, как потребление памяти, информацию о дескрипторе и т. Д.
С другой стороны, Refresh
на самом деле не получает всю эту информацию, он просто отбрасывает внутренний кэш. Информация обновляется только при доступе к любому из свойств. Так что Refresh
практически не снижает производительность.
Поэтому было бы более безопасно вызывать Refresh
на тот случай, если Microsoft решит изменить реализацию HasExited
в будущем.