2016-01-18 32 views
-1

[背景]工作集和峯值工作集值完整性無法維持的過程

  1. 我使用.NET下的System.Diagnostics.Process組件跟蹤 一個過程的性能。
  2. 我在1秒的間隔拍攝30個樣品
  3. 價值工作組的填充爲:

long peakWorkingSet = requiredProcess.PeakWorkingSet64其中

Process requiredProcess = Process.GetProcessesByName(processName).First(); 
  • 價值峯值工作集填入相同的過程實例:
  • long WorkingSet = requiredProcess.WorkingSet64

    [查詢]

    我期待PeakWorkingSet64是相關的內存峯值是由WorkingSet64代表(如果我錯了這裏請改正)

    但由於某些原因,我看到價值PeakWorkingSet64爲80K,實際上示例數據表明WorkingSet64的值從未達到該值。他們在5萬左右波動。

    任何輸入appreciated.Please幫助理解

    +0

    @Damon你能幫忙嗎? –

    +1

    您假設您每秒進行一次採樣時應始終查看峯值,這是不準確的。工作集可以在幾微秒內改變。 –

    回答

    1

    不知道要說的(爲什麼我特別應該能夠占卜)是什麼。

    PeakWorkingSet64確實認爲,像您期望的WorkingSet64整個歷史的峯值作爲MSDN文件規定:

    的物理內存,以字節爲單位的最高金額,分配給相關的過程自從它開始

    請注意,這意味着「從生成過程開始」,例如,包括運行時初始化的時間段。

    現在,您已嘗試通過每隔一秒間隔取少量(30)離散樣本來測量內存消耗。這不是一種非常可靠的測量方式。你從這些樣品中知道的就是在你觀察它的精確時間內工作組的樣子,而不是在稍後或稍後的時刻看起來像什麼。
    當您每秒查看一次時,工作集可能通常在50kB左右,但在樣本之間的另一時間(或任何其他值)可能爲80k。工作集不是固定的,他們一直在變化。
    此外,更有可能的是,啓動期間工作集可能會更大(即在您的代碼執行之前!)。因此,峯值自然會更高,但即使您做了一百萬個樣本,您也永遠無法在樣本中「測量」如此高的值。