如何获取任务管理器中显示的应用程序内存使用情况?

时间:2014-12-31 11:45:57

标签: c# .net memory process ram

我正在尝试获取应用程序的内存使用情况,但由于某种原因,我的大小与任务管理器不同

我正在使用:

enter image description here

任务管理器显示我的应用程序占用45mb,而当我在我的代码中拉动它时,我得到85mb 我怎样才能获得与任务管理器相同的大小(不使用wmi)

3 个答案:

答案 0 :(得分:6)

大概你正在查看"任务管理器"中的错误列。或在Process类中使用错误的属性。

我猜您正在寻找WorkingSet64而不是PrivateMemorySize64PrivateMemorySize64是为进程分配的虚拟内存量,而不是物理内存。对于物理内存使用WorkingSet64

此外,您需要在访问流程类中的任何动态属性之前调用process.Refresh(),因为它已被高度缓存。

process.Refresh();
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture);

答案 1 :(得分:1)

以上都不对我有用。因此,我找到了解决方案

How to get application memory usage as shown in Task Manager?

汉斯·帕桑特(Hans Passant)做得很好。

string prcName = Process.GetCurrentProcess().ProcessName;
var counter_Exec = new PerformanceCounter("Process", "Working Set - Private", prcName);
double dWsp_Exec =  (double)counter_Exec.RawValue / 1024.0; <---that is the value in KB

此外,有时我会发现一个较小的差异(<10%),这可能与另一个更新有关。 enter image description here

唯一的次要缺点是第一条指令需要很长时间(5“)来累积数据,因此它可能在线程中处理。

答案 2 :(得分:0)

使用以下代码尝试一次,可能会有所帮助

PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "ServerProcess";
PC.CounterName = "Working Set - Private";
PC.InstanceName = JSP[0].ProcessName; //Process
RAM_memorysize = PC.NextValue();            //float RAM_memorysize;
PC.Close();
PC.Dispose();