当我对从Process.GetProcesses()生成的进程集合的WorkingSet64属性求和时,总和小于GlobalMemoryStatusEx指示的总物理内存使用量。
当我在进程上运行操作(例如,加载大文件或注入代码等)时,系统的物理内存会跳起来,但WorkingSet64总和不会跟踪它。
有没有办法获取特定进程的实际非共享物理内存使用情况?
您可以获取该进程的私有工作集。
“私有工作集是一个进程使用的内存量,不能在其他进程之间共享,而工作集包括其他进程共享的内存。”
您可以使用ProcessCounter来访问此值。
Process thisProc = Process.GetCurrentProcess();
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = thisProc.ProcessName;
int privateMemory = PC.Next()/1000; //this will be in KB.