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]);
        }
    }
目录
相关文章
|
监控 Linux
centos 中查看 内存及磁盘使用率
通过这些命令,您可以全面了解系统资源的使用情况,从而更好地管理和优化系统。
2484 22
|
安全 数据库 Windows
解决Windows云服务器带宽和CPU利用率高的问题
本文针对Windows Server 2019 ×64系统,介绍如何排查云服务器带宽和CPU利用率过高的问题。通过任务管理器、性能监视器等工具定位高资源占用的进程,并根据进程是否正常采取相应措施。对于正常进程,建议优化或升级配置;对于异常进程,建议关闭进程并进行系统备份或还原。详细步骤包括使用“perfmon -res”查看资源使用情况,结合PID查找具体进程,分析处理后台任务、杀毒软件及应用程序的影响。
844 1
|
存储 固态存储
磁盘和内存的区别
存储特性: • 磁盘:非易失性存储,数据在断电后不会丢失,适合长期存储数据。 • 内存:易失性存储,数据在断电后会丢失,适合临时存储当前运行的程序和数据。 容量: • 磁盘:容量通常较大,从几百GB到数TB不等,适合存储大量的文件和数据。 • 内存:容量相对较小,一般在几GB到几十GB之间,用于提供快速的临时存储空间。 速度: • 磁盘:读写速度较慢,HDD一般在几十MB/s,SSD可以达到几百MB/s甚至数GB/s。 • 内存:读写速度非常快,通常在几十纳秒到几百纳秒之间,能够快速响应CPU的指令。
1062 2
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1377 8
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
314 11
|
Web App开发 Windows
Windows 记录一次磁盘相关的PC卡顿问题
【10月更文挑战第26天】本文记录了一次Windows系统中因磁盘问题导致的PC卡顿现象及其解决过程。通过查看任务管理器发现磁盘使用率高,经磁盘碎片整理、优化启动项与后台程序、更新磁盘驱动等步骤,最终解决了卡顿问题。建议定期进行磁盘维护,合理管理启动项,及时更新驱动以预防类似问题。
464 5
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
5111 2
|
存储 Windows
Windows 记录一次磁盘相关的PC卡顿问题
【10月更文挑战第25天】本文记录了一次 Windows 10 电脑卡顿问题的排查与解决过程。通过资源监视器、事件查看器、SMART 信息检查、磁盘扫描、后台程序排查、驱动更新等步骤,最终通过磁盘碎片整理和调整虚拟内存设置解决了卡顿问题。文章还提供了定期磁盘维护、合理设置虚拟内存及关注硬件健康的预防措施。
1201 1
|
弹性计算 关系型数据库 数据安全/隐私保护
阿里云国际版如何配置Windows服务器的虚拟内存
阿里云国际版如何配置Windows服务器的虚拟内存