未维护完整性 进程的工作集和峰值工作集值
本文关键字:工作集 维护 完整性 进程 | 更新日期: 2023-09-27 18:30:46
[背景]
- 我正在使用 .net 下的 System.Diagnostics.Process assembly 来跟踪过程的性能。
- 我以 30 秒的间隔采集 1 个样本
- 工作集的值填充为:
long peakWorkingSet = requiredProcess.PeakWorkingSet64
Process requiredProcess = Process.GetProcessesByName(processName).First();
- 填充了与以下相同的流程实例的峰值工作集的值:
long WorkingSet = requiredProcess.WorkingSet64
[查询]
我希望 PeakWorkingSet64 是与 WorkingSet64 表示的内存的峰值(如果我在这里弄错了,请更正)
但出于某种原因,我认为 PeakWorkingSet64 的值为 80K,而实际上样本数据表明 WorkingSet64 的值从未达到该值。它们在50K左右波动。
任何投入都值得赞赏。请帮助了解
不知道该怎么说(或者为什么我特别应该能够占卜)。
正如您所期望的那样,PeakWorkingSet64
确实保留了 MSDN 文档中指定的整个WorkingSet64
历史记录的峰值:
自关联进程启动以来为其分配的最大物理内存量(以字节为单位)。
请注意,这意味着"自进程生成以来",例如,这包括运行时初始化的时间段。
现在,您尝试通过获取少量 (30) 个离散样本来测量内存消耗,每个样本间隔为一秒。这不是一种非常可靠的测量方法。您从这些样本中知道的只是工作集在您查看它的确切时间时的样子,而不是它之前或稍后的样子。
当您每秒查看一次工作集时,工作集可能总是在 50kiB 左右,但在样本之间的其他时间(或任何其他值)可能是 80k。工作集不是恒定的,它们一直在变化。
此外,更有可能的是,工作集在启动期间(即,在您的代码执行之前!因此,峰值自然会更高,但即使你做了一百万个样本,你也永远无法用你的样本"测量"如此高的值。