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

14

我正在尝试获取我的应用程序的内存使用情况,但是出于某些原因,我得到的大小与任务管理器中显示的不同。

我正在使用:

enter image description here

任务管理器显示我的应用占用45MB,而当我在代码中获取它时,我得到了85MB。如何获得与任务管理器相同的大小(不使用WMI)。


1
在调用 process.PrivateMemorySize64 之前添加 process.Refresh() - Sriram Sakthivel
1
没有帮助,仍然得到之前的相同数值。 - atikot
2
如果你对这些东西感兴趣,我强烈建议放弃任务管理器并使用来自Sysinternals的进程资源管理器(Process Explorer)。请查看此视频http://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-2-Process-Explorer - Samuel
我正在使用 Windows 7 64 位操作系统。 - atikot
我添加了代码截图以及发生的情况。 - atikot
3个回答

9

对我来说以上方法都无效。因此,我找到了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秒)来累积数据,因此可以在线程中处理。


5
你可能在“任务管理器”中查看了错误的列,或者在进程类中使用了错误的属性。我猜你要查找的是WorkingSet64而不是PrivateMemorySize64PrivateMemorySize64是为进程分配的虚拟内存量,而不是物理内存。对于物理内存,请使用WorkingSet64
此外,在访问进程类中的任何动态属性之前,您需要调用process.Refresh(),因为它被严重缓存。
process.Refresh();
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture);

我在调试时添加了刷新并上传了代码,你可以看到内存大小不同,但内存大小没有太大变化,保持在45-47MB左右比较稳定。 - atikot
在调试时不要检查进程内存。将进程从调试器中运行并进行检查。因为在调试Visual Studio时,它会为您运行托管进程YourProcess.vshost.exe。这可能会导致混淆。我通过在控制台中打印输出(在Visual Studio之外运行)进行了测试,效果非常好。同时将Sleep(200)更改为Sleep(1000),以便与任务管理器同步。 - Sriram Sakthivel
我正在尝试不使用Visual Studio和调试,但仍然不正确,我在任务管理器中也看不到vshost。 - atikot
就像我之前所说,你仍然在任务管理器的错误栏目中查看。你需要检查“工作集”栏目。如果你需要检查私有工作集,请参考这个答案 - Sriram Sakthivel
同时,WorkingSet64 显示 114mb,PrivateMemorySize64 显示 80-84mb。 - atikot
显示剩余4条评论

3
尝试使用以下代码,可能会有所帮助。
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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接