以兆字节为单位获取进程内存使用情况

Getting process ram usage in megabytes

我正在尝试检索我的控制台应用程序的 ram 使用情况,为此我正在使用:

var ramUsage = Process.GetCurrentProcess().WorkingSet64;

然而,WorkingSet64 返回的值确实很大,我假设这些是 kbs,但我不是 100% 确定我是否需要将数字除以 1024 以获得兆字节,或者我需要除以 1024*1024?

任何人都可以阐明 Process.WorkingSet64 返回的值到底是什么。

根据the documentation,此属性返回的数字以字节为单位。

因此,要将其转换为千字节,需要除以 1024。要将其转换为兆字节,需要除以 10242。等等。

Process.WorkingSet64 属性 以字节为单位返回。 根据关于 属性:

的 MSDN 文章

Property Value Type: System.Int64

The amount of physical memory, in bytes, allocated for the associated process.

https://msdn.microsoft.com/en-us/library/system.diagnostics.process.workingset64%28v=vs.110%29.aspx

在 Windows 中,为了获得以兆字节为单位的值,你是正确的,因为你除以 1024 * 1024

var ramAllocation = Process.GetCurrentProcess().WorkingSet64;
var allocationInMB = ramUsage / (1024 * 1024);

旁注:Windows 使用 JEDEC 标准,其中 1 KB = 1024 字节。 IEC 标准定义 1 KB = 1000 字节和 1 KB = 1024 字节。 OS10.6 之后的 X 使用 ICE 兆字节,因此 1 KB = 1000 字节。一些 Linux 发行版,例如 10.10 之后的 Ubuntu,使用 ICE 前缀(1 兆字节 = 1024 千字节,1 兆字节 = 1000 千字节)。这就是为什么有时当您购买 HDD 时,它看起来 Windows (1MB = 1024kB) 小于广告大小(通常 1MB = 1000kB)。

此外,Cody Gray 指出这是 分配的 字节数,而不是 使用的 字节数。 OS分配的内存比程序使用的确切字节数多,一般不要在内存不用后立即回收。