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

本文关键字:工作集 维护 完整性 进程 | 更新日期: 2023-09-27 18:30:46

[背景]

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

long peakWorkingSet = requiredProcess.PeakWorkingSet64

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

long WorkingSet = requiredProcess.WorkingSet64

[查询]

我希望 PeakWorkingSet64 是与 WorkingSet64 表示的内存的峰值(如果我在这里弄错了,请更正)

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

任何投入都值得赞赏。请帮助了解

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

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

正如您所期望的那样,PeakWorkingSet64确实保留了 MSDN 文档中指定的整个WorkingSet64历史记录的峰值:

自关联进程启动以来为其分配的最大物理内存量(以字节为单位)。

请注意,这意味着"自进程生成以来",例如,这包括运行时初始化的时间段。

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