我正在尝试获取应用程序的内存使用情况,但由于某种原因,我的大小与任务管理器不同
我正在使用:
任务管理器显示我的应用程序占用45mb,而当我在我的代码中拉动它时,我得到85mb 我怎样才能获得与任务管理器相同的大小(不使用wmi)
答案 0 :(得分:6)
大概你正在查看"任务管理器"中的错误列。或在Process类中使用错误的属性。
我猜您正在寻找WorkingSet64
而不是PrivateMemorySize64
。 PrivateMemorySize64
是为进程分配的虚拟内存量,而不是物理内存。对于物理内存使用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%),这可能与另一个更新有关。
唯一的次要缺点是第一条指令需要很长时间(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();