counter.CategoryName = "Memory";
counter.Countername = "Available MBytes";
但我似乎找不到一种方法来获得内存总量。我该怎么做呢?
更新:
MagicKat:我在搜索时看到了这个问题,但它不起作用--“你是不是缺少一个程序集或引用?”
发布于 2008-09-19 20:09:00
可以使用p/invoke调用Windows API函数GlobalMemoryStatusEx
:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private class MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
public MEMORYSTATUSEX()
{
this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
然后使用like:
ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{
installedMemory = memStatus.ullTotalPhys;
}
或者,您可以使用WMI (托管但速度较慢)来查询Win32_ComputerSystem
类中的TotalPhysicalMemory
。
发布于 2008-09-19 20:06:28
添加对Microsoft.VisualBasic
和using Microsoft.VisualBasic.Devices;
的引用。
ComputerInfo
类包含您需要的所有信息。
发布于 2008-09-19 21:44:00
添加对Microsoft.VisualBasic.dll的引用,就像上面提到的那样。然后,获取总物理内存就像这样简单(是的,我测试了它):
static ulong GetTotalMemoryInBytes()
{
return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
}
https://stackoverflow.com/questions/105031
复制相似问题