为什么此功能在我的主机上运行良好,但在虚拟机上却无法运行? (GetPhysicalInstalledSystemMemory)

时间:2018-12-17 16:18:24

标签: c# virtual-machine kernel32

我有以下代码(正确地)为我提供了计算机上已安装的总内存(请注意,不是总的物理内存,它会比已安装的内存少一点):

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(不知道数量是否重要,但最重要的是,它给了我错误的值)。有任何可能的原因吗?

1 个答案:

答案 0 :(得分:2)

Windows通常会舍入总可用内存。在VM下看到的结果可能仅仅是由于整数运算将两个除法的结果截断了。

强制执行双重算术至少除以ServletContext一次,看看错误是否仍然存在。