Mih*_*kov 13 .net memory windows wmi memory-management
好的,我正在使用WMI(.net/C#)不断收集有关机器上运行的特定进程的数据.我通过Win32_PerfFormattedData_PerfProc_Process类获取数据.该类有很多属性,但我们感兴趣的是如下:
uint64 PageFileBytes;
Run Code Online (Sandbox Code Playgroud)
此进程在页面文件中使用的值(以字节为单位).分页文件存储进程使用的内存页面,这些内存未包含在其他文件中.分页文件由所有进程共享,分页文件中缺少空间可能会阻止其他进程分配内存.
uint32 PoolNonpagedBytes;
Run Code Online (Sandbox Code Playgroud)
非分页池中的值(以字节为单位),系统内存区域(操作系统使用的物理内存),用于无法写入磁盘的对象,但只要分配它们,就必须保留在物理内存中.Win32_PerfFormattedData_PerfOS_Memory中的PoolNonpagedBytes的计算方式与Win32_PerfFormattedData_PerfProc_Process中的PoolPagedBytes属性不同,因此它可能不等于Win32_PerfFormattedData_PerfProc_Process的所有实例的PoolPagedBytes总数.此属性仅显示上次观察到的值; 这不是一个平均值.
uint32 PoolPagedBytes;
Run Code Online (Sandbox Code Playgroud)
页面缓冲池中的值(以字节为单位),系统内存区域(操作系统使用的物理内存),用于在不使用时可写入磁盘的对象.Win32_PerfFormattedData_PerfOS_Memory中的PoolNonpagedBytes属性的计算方式与Win32_PerfFormattedData_PerfProc_Process中的PoolPagedBytes属性不同,因此它可能不等于Win32_PerfFormattedData_PerfProc_Process的所有实例的PoolPagedBytes总数.此属性仅显示上次观察到的值; 这不是一个平均值.
uint64 PrivateBytes;
Run Code Online (Sandbox Code Playgroud)
此进程已分配的当前值(以字节为单位),无法与其他进程共享.
uint64 VirtualBytes;
Run Code Online (Sandbox Code Playgroud)
进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,通过使用太多,该过程可能会限制其加载库的能力.
uint64 WorkingSet;
Run Code Online (Sandbox Code Playgroud)
任何时间点此进程的工作集中的最大数量(以字节为单位).工作集是进程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使页面未使用,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,则在它们离开主存储器之前,它们会被软故障返回到工作集中.
我目前正在使用该WorkingSet字段报告进程的内存使用情况.但是,这与任务管理器显示的内容不一致.我尝试过,PrivateBytes但这也不是"正确的".应用程序监视的进程是一个.NET进程(如果这很重要),并且应用程序报告它使用的内存比任务管理器同时显示的内存多至少100MB.
所以问题是如何计算任务管理器所示的进程内存使用的最佳近似值的"公式"是什么?

| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |