未维护完整性 过程的工作集和峰值工作集值

Integrity not maintained Working Set and Peak Working Set Values for a process

[背景]

  1. 我正在使用 .net 下的 System.Diagnostics.Process 程序集来跟踪 进程的性能。
  2. 我正在以 1 秒的间隔采集 30 个样本
  3. 工作集的值填充为:

long peakWorkingSet = requiredProcess.PeakWorkingSet64 其中

Process requiredProcess = Process.GetProcessesByName(processName).First();
  1. 使用与以下相同的流程实例填充的峰值工作集的值:

long WorkingSet = requiredProcess.WorkingSet64

[查询]

我希望PeakWorkingSet64是WorkingSet64所代表的关联内存的峰值(这里有误请指正)

但出于某种原因,我看到 PeakWorkingSet64 的值为 80K,而实际上样本数据表明 WorkingSet64 的值从未达到该值。他们在 50K 左右波动。

任何输入appreciated.Please有助于理解

不知道该说些什么(或者为什么我特别应该能够占卜)。

如您所料,

PeakWorkingSet64 确实包含 MSDN 文档中指定的 WorkingSet64 整个历史的峰值:

The maximum amount of physical memory, in bytes, allocated for the associated process since it was started.

请注意,这意味着 "from since the process was spawned",例如包括运行时初始化的时间段。

现在,您已尝试通过以一秒的间隔获取少量 (30) 个离散样本来测量内存消耗。这不是一种非常可靠的测量方法。从这些样本中,您所知道的只是工作集在您查看它的准确时间的样子,而不是它之前或之后的样子。
当您每秒查看一次工作集时,工作集可能总是在 50kiB 左右,但在样本之间的另一个时间(或任何其他值)可能是 80k。工作集不是恒定的,它们一直在变化。
此外,更有可能的是,工作集在启动期间可能会更大(也就是说,甚至在您的代码执行之前!)。因此,峰值自然会更高,但您的样本永远不会达到 "measure" 如此高的值,即使您做了一百万个样本。