代码写的很烂,多多包涵就是了,用起来感觉还可以,需要几个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 }
几乎不会C#,于是只能纯路过了
@小明猪,
我已经打算把技术移除出去了
@janxin, 指博客的技术分类?跟我一样把技术博客转变成扯蛋博客吧
@小明猪,
就是要变成扯蛋的
同沙发,纯路过….