所以我的应用程序需要知道可用的总RAM。至于存在至少4种不同的方式:
我喜欢前两个,但是他们在我的机器上给出了略微不同的结果(2支2GB,Windows 8.1 64位)。
我用来从VisualBasic dll获取它的代码:
class Program
{
private static readonly Lazy<ComputerInfo> ComputerInfo = new Lazy<ComputerInfo>();
public static ulong TotalRam => ComputerInfo.Value.TotalPhysicalMemory;
static void Main(string[] args)
{
Console.WriteLine("Total RAM from ComputerInfo: {0} bytes", TotalRam);
// Result: Total RAM from ComputerInfo: 4292902912 bytes
}
}
我用来从Windows Management获取它的代码:
class Program
{
public static IEnumerable<object> GetResults(string win32ClassName, string property)
{
return (from x in new ManagementObjectSearcher("SELECT * FROM " + win32ClassName).Get().OfType<ManagementObject>()
select x.GetPropertyValue(property));
}
public static ulong? TotalInstalledBytes
{
get
{
var values = GetResults("Win32_PhysicalMemory", "Capacity");
ulong? sum = null;
foreach (var item in values)
{
var casted = item as ulong?;
if (casted.HasValue)
{
if (sum == null) sum = 0;
sum += casted.Value;
}
}
return sum;
}
}
static void Main(string[] args)
{
Console.WriteLine("Total RAM from WMI: {0} bytes", TotalInstalledBytes);
// Result: Total RAM from WMI: 4294967296 bytes
}
}
差异略小于2 MB,2064384字节或2016 kB。 我的问题是:为什么会这样?
我的猜测是:
感谢您的回复。
答案 0 :(得分:1)
这可能与您的情况有关:
<强> TotalPhysicalMemory 强>
物理内存的总大小。请注意,在某些情况下,此属性可能无法返回物理内存的准确值。例如,如果BIOS使用某些物理内存,则不准确。要获得准确的值,请改用Win32_PhysicalMemory中的Capacity属性。