Windows系统如何获取任务管理器显示的内存缓存数值?
Windows任务管理器内存缓存数值获取方案
参考截图(目标取值位置):
- 首先明确核心问题结论:截图中展示的内存缓存数值,无法直接通过
Win32_OperatingSystemWMI类读取。Win32_OperatingSystem类仅提供总物理内存、可用物理内存、总虚拟内存、空闲虚拟内存这类基础内存统计属性,不存在对应系统缓存大小的字段,也无法通过该类的现有字段准确换算出缓存值。 - 该缓存值和任务管理器的取值逻辑完全对齐的获取方法如下:
- 方法1:读取系统内置性能计数器(推荐,实现简单、跨Windows版本兼容性好)
任务管理器本身就是直接读取\Memory\Cached Bytes这个性能计数器的数值作为缓存值展示,该计数器返回值单位为字节,除以1024*1024即可得到以MB为单位的缓存大小,和截图展示数值完全一致。
快速验证可以直接在PowerShell中运行以下命令:
如果需要通过WMI渠道读取,可以查询性能计数器对应的WMI类# 输出当前系统缓存大小,单位为MB,结果和任务管理器展示一致 [math]::Round((Get-Counter '\Memory\Cached Bytes').CounterSamples.CookedValue / 1MB, 0)Win32_PerfFormattedData_PerfOS_Memory,读取其中的CacheBytes属性即可,对应WQL查询语句为:SELECT CacheBytes FROM Win32_PerfFormattedData_PerfOS_Memory - 方法2:调用原生Windows API获取
可以调用ntdll.dll导出的NtQuerySystemInformation函数,传入SystemPerformanceInformation信息类,从返回的系统内存信息结构体中,累加待机内存列表、修改页列表的总大小计算得到缓存值。该方法需要自行处理不同Windows版本的结构体偏移、调用权限问题,实现成本较高,无特殊定制需求不推荐使用。
- 方法1:读取系统内置性能计数器(推荐,实现简单、跨Windows版本兼容性好)
避坑提示:不要尝试用
GlobalMemoryStatusEx等通用内存API返回的空闲内存、可用内存值推导缓存大小,这些值和缓存值没有固定换算关系,计算结果误差极大。
内容的提问来源于stack exchange,提问作者HermanChris22
相关产品推荐
相关产品推荐

