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

时间:2013-02-06 09:58:57

标签: c# .net memory-management

如何获取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()给出~3 PagedMS& PagedMS64给出~379

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

但这些与任务管理器的显示不同。我想得到的是'18 .9'和'9'即。 Windows 8任务管理器报告的应用程序的内存使用情况。 我如何通过代码执行此操作? 我使用.Net 4.0,visual studio 2012

1 个答案:

答案 0 :(得分:3)

我不会尝试复制taskmgr所做的事情,而是使用逻辑上对你有意义的数字。可能是私有字节(当然,使用64位版本)。专用字节是实际使用的字节,不与任何其他进程共享。

没有完美的内存编号(无论是在Windows上还是在Linux上),因为只要多个进程共享某些页面,内存使用就可以解释。

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

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