获取windows 8任务管理器报告的内存使用情况

本文关键字:内存 用情 情况 报告 windows 任务管理器 获取 | 更新日期: 2023-09-27 17:58:01

如何获得C#应用程序使用的总内存?我尝试过:GC.GetTotalMemory()Process.GetCurrentProcess().PrivateMemorySize,PrivateMemorySize64,VirtualMemorySize,VMS64,PagedMS。

他们确实报告了各种值,这是可以的。但这些值与我在任务管理器中看到的不同。

我使用的是Windows 8,任务管理器除了应用程序名称外,还在右侧分别显示所有应用程序使用的资源。我的应用程序的当前内存也会显示出来。假设它是18.9 MB,如果我强制使用GC.Collect().,它会下降到大约9 MB

现在,在GC.Collect()之前:PrivateMemorySize&PMS64均报告~42(转换为MB后)GetTotalMemory()给出约3PagedMS&PagedMS64给出约379

以及在GC.Collect()之后:PrivateMemorySize&PMS64均报告~39(转换为MB后)GetTotalMemory()给出~1PagedMS&PagedMS64给出~367

但这些与任务管理器的显示不同。我想要得到的是"18.9"answers"9",即windows 8任务管理器报告的应用程序的内存使用情况。我如何通过代码隐藏实现这一点?我使用.Net 4.0,visual studio 2012

获取windows 8任务管理器报告的内存使用情况

我不会尝试复制taskmgr的功能,而是使用逻辑上对您有意义的数字。可能,这是私有字节(当然,使用64位版本)。专用字节是指那些实际正在使用并且不与任何其他进程共享的字节。

没有完美的内存数量(无论是在Windows还是Linux上),因为一旦多个进程共享一些页面,内存使用情况就可以进行解释。

不过,私有字节非常适合大多数应用程序。

更新:Windows 8任务管理器显示工作集专用字节这是一个糟糕的衡量标准。它告诉你这个应用程序目前有多少内存在RAM中。这可能比实际的内存使用量要少得多。它不会告诉您如果该进程退出,将释放多少内存。