Почему эта функция хорошо работает на моей основной машине, а не на виртуальной?(GetPhysicallyInstalledSystemMemory) - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующий код, который (правильно) дает мне общую установленную память на моем компьютере (обратите внимание, не общую физическую память, которая будет немного меньше, чем установленная память):

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());
        }

Однако, когда я запускаю ее на своей тестовой виртуальной машине, она дает мне на 1 ГБ меньше, чем должна (не знаю, имеет ли значение это значение, но в итоге это дает мне неправильное значение).Любые возможные причины для этого?

1 Ответ

0 голосов
/ 17 декабря 2018

Windows обычно округляет общую доступную память.Результат, который вы видите под виртуальной машиной, может быть вызван целочисленной арифметикой, усекающей результат двух делений.

Принудительное двойное арифметическое деление, по крайней мере, один раз на 1024.0, и посмотрите, сохраняется ли ошибка.

...