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

时间:2016-01-18 15:42:36

标签: c# windows process performance-testing

[背景]

  1. 我正在使用.net下的System.Diagnostics.Process程序集进行跟踪 一个过程的表现。
  2. 我以1秒的间隔拍摄30个样本
  3. 工作集的值填充为:
  4. long peakWorkingSet = requiredProcess.PeakWorkingSet64其中

    Process requiredProcess = Process.GetProcessesByName(processName).First();
    
    1. 峰值工作集的值填充了相同的流程实例:
    2. long WorkingSet = requiredProcess.WorkingSet64

      [查询]

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

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

      任何投入赞赏。请帮助理解

1 个答案:

答案 0 :(得分:1)

不确定该怎么说(或者为什么我特别应该能够神圣)。

正如您所期望的那样,{p> PeakWorkingSet64确实符合MSDN文档中指定的WorkingSet64整个历史记录的最高值:

  

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

请注意,这意味着“从产生过程开始”,例如,包括运行时初始化的时间段。

现在,您尝试通过采用少量(30个)离散样本来测量内存消耗,每个样本间隔一秒。这不是一种非常可靠的测量方法。从这些样本中你所知道的就是工作装置在你看到它的精确时间看起来的样子,而不是在片刻之前或片刻之后的样子。 当你每秒看一次时,工作集可能总是大约50kiB,但在样本之间的另一个时间(或任何其他值)可能是80k。工作集不是一成不变的,它们一直在变化 此外,更有可能的是,工作集在启动期间可能会大得多(也就是说,甚至在代码执行之前!)。因此,峰值自然会更高,但即使你做了一百万个样本,你也永远无法用你的样本“测量”如此高的值。