You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF获取应用内存占用:代码结果与任务管理器数值不符问题

解决内存占用数值与任务管理器不一致的问题

嗨,我来帮你理清这个内存数值差异的问题~

核心原因:统计的内存指标不一样

你代码里用的WorkingSet64和任务管理器显示的50MB,根本不是同一个内存指标:

  • WorkingSet64统计的是进程的整个工作集(Working Set):它包含了进程自己的私有内存,加上进程共享使用的系统库(比如.NET运行时的clr.dll、Windows核心库kernel32.dll这些,其他进程也可能在调用这些库)占用的物理内存。这就是为什么你的代码返回130MB的原因——它把共享部分也算进去了。
  • 你在任务管理器里看到的50MB,大概率是私有工作集(Private Working Set):这部分只统计进程独占的、不会和其他进程共享的内存,所以数值会小很多。

验证这个差异的方法

打开任务管理器,切换到「详细信息」标签:

  • 右键点击表头,勾选「工作集」和「私有工作集」两个选项
  • 你会发现「工作集」的数值和你代码返回的130MB基本吻合,而「私有工作集」就是你看到的50MB左右。

修改代码获取和任务管理器一致的数值

如果你想让代码返回和任务管理器显示一致的内存数值,只需要把WorkingSet64换成PrivateMemorySize64就行,这个属性专门返回进程的私有内存大小(单位是字节)。修改后的代码如下:

Process applicationProcess = Process.GetCurrentProcess();
long privateMemoryUsed = applicationProcess.PrivateMemorySize64;
string mem = ConvertBytesToMegabytes(privateMemoryUsed).ToString();

private double ConvertBytesToMegabytes(long bytes) 
{ 
    return (bytes / 1024f) / 1024f; 
}

运行这段代码,得到的数值就会和任务管理器里的「私有工作集」对应上了。

补充说明

不同Windows版本的任务管理器,「内存」列默认显示的指标可能略有不同(比如有些版本显示的是「提交大小」),但最常见的还是私有工作集。你可以通过勾选不同的内存指标,对比代码返回的数值来确认对应关系。

内容的提问来源于stack exchange,提问作者user979033

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:59