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]);
        }
    }
目录
相关文章
|
25天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
1天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
269 12
|
17天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
5天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
19天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
22天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2582 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
173 2
|
2天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
5天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
266 2
|
21天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1579 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码