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
相关产品推荐
相关产品推荐

