C# 获取Windows系统信息以及CPU、内存和磁盘使用情况

简介: C# 获取Windows系统信息以及CPU、内存和磁盘使用情况

获取系统内存、CPU的使用情况

开发环境:

开发工具:Visual Studio 2013

.NET Framework版本:4.5

实现代码:

public class SystemUtil
    {
        #region 内存
        #region 获得内存信息API
        [DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);
        //定义内存的信息结构
        [StructLayout(LayoutKind.Sequential)]
        private struct MEMORY_INFO
        {
            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; //保留 这个值始终为0
        }
        private static MEMORY_INFO GetMemoryInfo()
        {
            MEMORY_INFO MemoryInfo = new MEMORY_INFO();
            MemoryInfo.DWLength = (uint)System.Runtime.InteropServices.Marshal.SizeOf(MemoryInfo);
            GlobalMemoryStatusEx(ref MemoryInfo);
            return MemoryInfo;
        }
        #endregion
        /// <summary>
        /// 获取系统内存
        /// </summary>
        /// <returns></returns>
        public static string GetSysMemory()
        {
            MEMORY_INFO MemoryInfo = GetMemoryInfo();
            return ConvertBytes((long)MemoryInfo.ullTotalPhys);
        }
        /// <summary>
        /// 获取剩余内存
        /// </summary>
        /// <returns></returns>
        public static string GetUnUsedMemory()
        {
            MEMORY_INFO MemoryInfo = GetMemoryInfo();
            return ConvertBytes((long)MemoryInfo.ullAvailPhys);
        }
        /// <summary>
        /// 获取已使用内存
        /// </summary>
        /// <returns></returns>
        public static string GetUsedMemory()
        {
            MEMORY_INFO MemoryInfo = GetMemoryInfo();
            return ConvertBytes((long)(MemoryInfo.ullTotalPhys - MemoryInfo.ullAvailPhys));
        }
        /// <summary>
        /// 获取应用使用内存
        /// </summary>
        /// <param name="appName"></param>
        /// <returns></returns>
        public static string GetAppMemory(string appName)
        {
            Process CurrentProcess = Process.GetProcessesByName(appName)[0];
            PerformanceCounter Perform = new PerformanceCounter("Process", "Working Set - Private", CurrentProcess.ProcessName);
            return ConvertBytes((long)Perform.NextValue());
        }
        /// <summary>
        /// 获取当前应用使用内存
        /// </summary>
        /// <returns></returns>
        public static string GetCurrentAppMemory()
        {
            long memory = Process.GetCurrentProcess().PrivateMemorySize64;
            return ConvertBytes(memory);
        }
        #endregion
        #region CPU
        /// <summary>
        /// 获取CPU使用率
        /// </summary>
        /// <returns></returns>
        public static string GetUsedCPU()
        {
            ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOS_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                if (mo["Name"].ToString() == "_Total")
                {
                    list.Add(mo["PercentProcessorTime"].ToString());
                }
            }
            return list.Sum(s => int.Parse(s)) + "%";
        }
        #endregion
        #region 硬盘
        public static string GetUsedDisk()
        {
            ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfDisk_PhysicalDisk");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                if (mo["Name"].ToString() == "_Total")
                {
                    list.Add(mo["PercentDiskTime"].ToString());
                }
            }
            return list.Sum(s => int.Parse(s)) + "%";
        }
        #endregion
        #region 电脑信息
        /// <summary>
        /// 获取CPU序列号
        /// </summary>
        /// <returns></returns>
        public static string GetCpuID()
        {
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo.Properties["ProcessorId"].Value.ToString());
            }
            return string.Join("|", list);
            //若需要获取所有属性,可迭代ManagementObject.Properties
            //foreach (PropertyData pd in mo.Properties)
            //{
            //    Console.WriteLine(pd.Name + "----" + pd.Value);
            //}
        }
        /// <summary>
        /// 获取Mac地址
        /// </summary>
        /// <returns></returns>
        public static string GetMac()
        {
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                {
                    list.Add(mo["MacAddress"].ToString());
                }
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取IP地址
        /// </summary>
        /// <returns></returns>
        public static string GetIp()
        {
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                {
                    list.Add(((Array)mo.Properties["IpAddress"].Value).GetValue(0).ToString());
                }
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取硬盘序列号
        /// </summary>
        /// <returns></returns>
        public static string GetDiskID()
        {
            ManagementClass mc = new ManagementClass("Win32_DiskDrive");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo.Properties["Model"].Value.ToString());
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取系统名称
        /// </summary>
        /// <returns></returns>
        public static string GetSystemName()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["Name"].ToString());
            }
            return string.Join("|", list);
            // return System.Environment.GetEnvironmentVariable("ComputerName")
        }
        /// <summary>
        /// 获取当前登录用户
        /// </summary>
        /// <returns></returns>
        public static string GetLoginUser()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["UserName"].ToString());
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取电脑类型
        /// </summary>
        /// <returns></returns>
        public static string GetPcType()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["SystemType"].ToString());
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取系统内存
        /// </summary>
        /// <returns></returns>
        public static string GetSysMemory2()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["TotalPhysicalMemory"].ToString());
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取剩余内存
        /// </summary>
        /// <returns></returns>
        public static string GetUnUsedMemory2()
        {
            ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");
            ManagementObjectCollection moc = mc.GetInstances();
            long memory = 0;
            foreach (ManagementObject mo in moc)
            {
                memory += long.Parse(mo.Properties["AvailableMBytes"].Value.ToString());
            }
            return ConvertBytes(memory);
        }
        /// <summary>
        /// 获取电脑品牌
        /// </summary>
        /// <returns></returns>
        public static string GetPcBrand()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["Manufacturer"].ToString());
            }
            return string.Join("|", list);
        }
        /// <summary>
        /// 获取电脑型号
        /// </summary>
        /// <returns></returns>
        public static string GetPcModel()
        {
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            List<string> list = new List<string>();
            foreach (ManagementObject mo in moc)
            {
                list.Add(mo["SystemFamily"].ToString());
            }
            return string.Join("|", list);
        }
        #endregion
        public static string ConvertBytes(long len)
        {
            double dlen = len;
            string[] sizes = { "B", "KB", "MB", "GB", "TB" };
            int order = 0;
            while (dlen >= 1024 && order + 1 < sizes.Length)
            {
                order++;
                dlen = dlen / 1024;
            }
            return String.Format("{0:0.##} {1}", dlen, sizes[order]);
        }
    }
目录
相关文章
|
11月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1515 0
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3469 0
|
10月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
1109 11
|
12月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1625 0
|
监控 Linux
centos 中查看 内存及磁盘使用率
通过这些命令,您可以全面了解系统资源的使用情况,从而更好地管理和优化系统。
2911 22
|
安全 数据库 Windows
解决Windows云服务器带宽和CPU利用率高的问题
本文针对Windows Server 2019 ×64系统,介绍如何排查云服务器带宽和CPU利用率过高的问题。通过任务管理器、性能监视器等工具定位高资源占用的进程,并根据进程是否正常采取相应措施。对于正常进程,建议优化或升级配置;对于异常进程,建议关闭进程并进行系统备份或还原。详细步骤包括使用“perfmon -res”查看资源使用情况,结合PID查找具体进程,分析处理后台任务、杀毒软件及应用程序的影响。
941 1
|
人工智能 运维 监控
2025年阿里云服务器配置选择全攻略:CPU、内存、带宽与系统盘详解
在2025年,阿里云服务器以高性能、灵活扩展和稳定服务助力数字化转型,提供轻量应用服务器、通用型g8i实例等多样化配置,满足个人博客至企业级业务需求。针对不同场景(如计算密集型、内存密集型),推荐相应实例类型与带宽规划,强调成本优化策略,包括包年包月节省成本、ESSD云盘选择及地域部署建议。文中还提及安全设置、监控备份的重要性,并指出未来可关注第九代实例g9i支持的新技术。整体而言,阿里云致力于帮助用户实现性能与成本的最优平衡。 以上简介共计238个字符。
|
存储 设计模式 监控
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
429 0
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?