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

ati*_*kot 9 .net c# memory ram process

我试图获取我的应用程序的内存使用但由于某种原因我得到的大小不同于任务管理器

我在用:

在此输入图像描述

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

Pat*_*ick 10

以上都不适合我。因此我找到了这个解决方案

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

由汉斯·帕桑特(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
Run Code Online (Sandbox Code Playgroud)

另外,我有时会发现细微的差异(<10%),这可能与不同的更新有关。 在此输入图像描述

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


Sri*_*vel 6

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

我想你要找的WorkingSet64不是PrivateMemorySize64.PrivateMemorySize64是为进程分配的虚拟内存量,而不是物理内存.用于物理内存使用WorkingSet64.

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

process.Refresh();
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)