我有以下代码,可以(正确地)给出我计算机上安装的总内存(注意,不是总物理内存,总物理内存会比安装的内存略小):
using System.Runtime.InteropServices;
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetPhysicallyInstalledSystemMemory(out long TotalMemoryInKilobytes);
public float getInstalledRAM()
{
long memKb;
GetPhysicallyInstalledSystemMemory(out memKb);
return float.Parse((memKb / 1024 / 1024).ToString());
}
然而,当我在测试虚拟机上运行它时,它给出的值比应该的少了1GB(不知道数量是否重要,但最终结果是它给了我一个错误的值)。有可能的原因是什么?
GlobalMemoryStatusEx
函数,而这个函数应该包括通常无法访问的内存,否则我们将使用ComputerInfo
类中的TotalPhysicalMemory
属性。不过我的理解可能有误。"通过 GetPhysicallyInstalledSystemMemory 函数检索到的物理内存量必须等于或大于 GlobalMemoryStatusEx 函数报告的内存量;" 这意味着它应该包括那些不可用的内存部分。 - S. M.