6

如何获取 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

4

1 回答 1

3

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

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

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

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

于 2013-02-06T10:14:15.687 回答