您的位置:首页 > 编程语言 > C#

C#获取本机CPU、内存信息类

2011-04-10 15:41 225 查看
转自:http://www.kernel2heart.com/2010/08/c-sharp-get-pc-cpu-memory-class/

代码写的很烂,多多包涵就是了,用起来感觉还可以,需要几个using:

using System.Runtime.InteropServices;
using System.Management;


其中System.Management需要手工添加,发布时,需要附带System.Management.dll。

public class SystemInfo
{

[StructLayout(LayoutKind.Sequential)]
private struct MEMORY_INFO
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}

[DllImport("kernel32")]
private static extern void GlobalMemoryStatus(ref  MEMORY_INFO meminfo);

private int m_ProcessorCount = 0;   //CPU个数
private PerformanceCounter pcCpuLoad;   //CPU计数器
private long m_PhysicalMemory = 0;   //物理内存

#region 构造函数
public SystemInfo()
{
//初始化CPU计数器
pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");
pcCpuLoad.MachineName = ".";
pcCpuLoad.NextValue();

//CPU个数
m_ProcessorCount = Environment.ProcessorCount;

//获得物理内存
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if (mo["TotalPhysicalMemory"] != null)
{
m_PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());
}
}
}
#endregion

#region CPU个数
///

/// 获取CPU个数
///

public int ProcessorCount
{
get
{
return m_ProcessorCount;
}
}
#endregion

#region CPU占用率
///

/// 获取CPU占用率
///

public float CpuLoad
{
get
{
return pcCpuLoad.NextValue();
}
}
#endregion

#region 可用内存
///

/// 获取可用内存
///

public long MemoryAvailable
{
get
{
long availablebytes = 0;
ManagementClass mos = new ManagementClass("Win32_OperatingSystem");
foreach (ManagementObject mo in mos.GetInstances())
{
if (mo["FreePhysicalMemory"] != null)
{
availablebytes = 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
}
}
return ((availablebytes / 1024) / 1024);
}
}
#endregion

#region 物理内存
///

/// 获取物理内存
///

public int PhysicalMemory
{
get
{
double temp = Math.Round(float.Parse(((m_PhysicalMemory / 1024) / 1024).ToString()) / 1024);
return int.Parse(temp.ToString());
}
}
#endregion

#region 物理内存占用率
///

/// 获取物理内存占用率
///

public uint PhysicalMemoryLoad
{
get
{
MEMORY_INFO MemInfo = new MEMORY_INFO();
GlobalMemoryStatus(ref  MemInfo);
return MemInfo.dwMemoryLoad;
}
}
#endregion
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: