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]);
        }
    }
目录
相关文章
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1633 0
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
399 0
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3650 0
|
11月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
1208 11
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
559 22
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1743 0
|
12月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
473 19
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
509 3