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

代码写的很烂,多多包涵就是了,用起来感觉还可以,需要几个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#获取本机CPU、内存信息类》有 5 条评论

  1. 小明猪 Windows XP Firefox 3.6.8 说:

    几乎不会C#,于是只能纯路过了 :zzz

  2. Green Damoe Windows 7 Google Chrome 5.0.375.127 说:

    同沙发,纯路过….

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

:zzz :stop :stone :smile :oops: :love :hurt2 :hurt :hit :hide :freeze :evil2 :cry :blind :angel 注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。