當前.NET Framework(.NET 4.0)的Process僅提供進程的記憶體工作集的擷取(通過WorkingSet64屬性),而沒有提供對私人工作集的擷取。注意在Windows Vista之後,Windows工作管理員的進程記憶體一項預設是顯示進程的私人工作集的,因此這一效能資料還是很重要的。
通過效能計數器Process類的WorkingSet – Private可以擷取進程的私人工作集。當然通過WorkingSet屬性也可以擷取工作集。另外Process類和效能計數器都有Peak WorkingSet可以擷取工作集的高峰值。
比如,通過Process.WorkingSet64和效能計數器的WorkingSet和WorkingSet Private來監控一個程式(以工作管理員taskmgr做樣本)的記憶體工作集。
var processName = "taskmgr";
using (var process = Process.GetProcessesByName(processName)[0])
using (var p1 = new PerformanceCounter("Process", "Working Set - Private", processName))
using (var p2 = new PerformanceCounter("Process", "Working Set", processName))
{
while (true)
{
//注意除以CPU數量
Console.WriteLine("{0}{1:N} KB", "工作集(進程類)", process.WorkingSet64 / 1024);
Console.WriteLine("{0}{1:N} KB", "工作集 ", process.WorkingSet64 / 1024);
Console.WriteLine("{0}{1:N} KB", "私人工作集 ", p1.NextValue() / 1024);
Thread.Sleep(1000);
}
}
輸出:
工作集(進程類)9,024.00 KB
工作集 9,024.00 KB
私人工作集 2,028.00 KB
工作集(進程類)9,024.00 KB
工作集 9,024.00 KB
私人工作集 2,028.00 KB
……