Process.PrivateMemorySize64在多次迭代中返回相同的值

时间:2014-09-18 21:14:34

标签: c# memory process

此代码在每次迭代中返回相同的值:

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

1 个答案:

答案 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