TotalPhysicalMemory имеет громкий отказ от ответственности в документах библиотеки MSDN:
Общий объем физической памяти. Быть
осознавая, что при некоторых обстоятельствах
это свойство не может вернуть
точное значение для физического
объем памяти. Например, это не
точно, если BIOS использует некоторые из
физическая память. Для точного
значение, используйте свойство Capacity в
Вместо Win32_PhysicalMemory.
Afaik, все современные машины копируют свои BIOS в память. Я думаю, что свойство Capacity - это то, сколько памяти используется в машине, а не сколько присутствует. Это 2 гигабайта в любой 32-битной операционной системе, 4 гигабайта для 32-битного процесса в 64-битной операционной системе. Сравните, скажем, со свойством List <>. Capacity против Count.
Я получаю приличное значение для TotalPhys, 3 гигабайта, которые, как я знаю, есть на моем ноутбуке. Емкость 2 гигабайта, соответствует операционной системе. WMI иногда становится ненадежным, вряд ли он идеален.
Используйте утилиту WMI Code Creator , чтобы получить второе мнение. Я думаю, что это программа .NET 1.1, поэтому остерегайтесь ее результатов, если вы запускаете ее на 64-битной операционной системе. Если вы используете Visual Studio 2010, следите за настройкой цели платформы в вашем проекте. По умолчанию используется x86, поэтому вы будете работать в 32-битном режиме, даже в 64-битной операционной системе. Проект + Свойства, вкладка "Сборка", настройка цели платформы.