此代码在每次迭代中返回相同的值:
var process = Process.GetCurrentProcess();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(process.PrivateMemorySize64 + Environment.NewLine);
}
// Output:
// 19853313
// 19853313
// 19853313
// 19853313
// ...
此代码返回不同的值:
for (int i = 0; i < 10; i++)
{
var process = Process.GetCurrentProcess();
Console.WriteLine(process.PrivateMemorySize64 + Environment.NewLine);
}
// Output:
// 19865600
// 20336640
// 20791296
// 21245952
// ...
Process.GetCurrentProcess()是否记录了内存值的快照?
MSDN&#39; GetCurrentProcess页面说明了这一点,但我不确定其含义是什么:
Gets a new Process component and associates it with the currently active process
答案 0 :(得分:7)
您需要调用以下行来刷新它:
process.Refresh();
这应该适合你现在:
var process = Process.GetCurrentProcess();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(process.PrivateMemorySize64 + Environment.NewLine);
process.Refresh();
}
输出我现在得到:
26152960
26763264
27377664
27922432
28532736
29143040
29757440
30302208
30912512
31522816
来自他们提供的示例中的Process.PrivateMemorySize64 Property - MSDN。
此外,从Process.Refresh Method - MSDN开始,我们会进一步解释:
调用Refresh后,首先请求有关每个的信息 property使进程组件从中获取新值 相关过程。
当Process组件与流程资源相关联时, 根据过程立即填充Process的属性值 相关流程的状态。如果有关的信息 相关过程随后发生变化,这些变化不是 反映在Process组件的缓存值中。 过程 component是过程资源的快照 相关。要查看关联过程的当前值, 调用Refresh方法。
有关快照是什么以及属性方面没有的更多信息,请参阅this StackOverflow Question。