C#Process类的属性是否等于任务管理器内存列?

时间:2016-02-25 03:18:27

标签: c# memory process taskmanager

我知道Process类有很多相对于内存的属性,如(Private)WorkingSet(64),PrivateMemorySize64(byte unit),...我试图得到它们的值并除以(1024 * 1024)得到MB数他们看起来它们都没有像任务管理器内存列那样的值。是否存在具有TM值的财产?

1 个答案:

答案 0 :(得分:-1)

不,过程中没有属性可以从中获取任务管理器私有工作集但是......

您可以从the original answer there

中的效果计数器中检索相同的值
using System;
using System.Diagnostics;

class Program {
    static void Main(string[] args) {
        string prcName = Process.GetCurrentProcess().ProcessName;
        var counter = new PerformanceCounter("Process", "Working Set - Private", prcName);
        Console.WriteLine("{0}K", counter.RawValue / 1024);
        Console.ReadLine();
    }
}

您可能不知道Process中可用的值不代表相同的东西。 私人工作集仅与 PrivateMemorySize64 衡量的内存子集相关。请参阅答案there

事实上,这实际上取决于你想要实现的目标。

  • 如果您想拥有与任务管理器中相同的值,请阅读性能计数器。
  • 如果要测量应用程序使用的内存,则应使用“处理”属性。例如,如果您想知道无法与其他进程共享的内存,请使用PrivateMemorySize64

作为旁注,Process上的所有“非64”内存相关属性都已过时。您还应该阅读Process documentation

供参考私人工作集与任务管理器或Process Explorer相同的列中显示的内容相关。

您可以参考Windows documentationrelated question来了解每个任务管理器列的含义。