C# 获取系统使用情况

一个简单的小工具,主要用来获取当期的电脑信息以及内存的使用情况。本来也没想着写这个玩意,还不如随便下个相关的软件好使,但是前一段时间为了追查系统卡顿的问题,所以就加上了一段统计内存的代码,用来看看是否由这个引起的。

既然统计了内存相关的数据,干脆一不做二不休,又加了下CPU以及硬盘的使用情况统计。

统计的准确不准确我也不好说,因为我也不太能确定,暂且就做个参考值吧。或许使用很多大佬封装过的第三方DLL会准确很多。

下面工具中还展示了部分关于电脑的基本信息数据,这个在之前的时候应该是有发过。

主要还是使用windows WMI,虽然下列关于内存情况的统计没用(但其实也可以统计到),因为我感觉这个方式可能稍微准确点。。。

实现功能:

- 获取系统内存、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);}#endregionpublic 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]);}}
   private void btnDetection_Click(object sender, EventArgs e){label1.Text = "电脑品牌:" + SystemUtil.GetPcBrand();label2.Text = "电脑型号:" + SystemUtil.GetPcModel();label3.Text = "电脑类型:" + SystemUtil.GetPcType();label4.Text = "系统名称:" + SystemUtil.GetSystemName();label5.Text = "当前用户:" + SystemUtil.GetLoginUser();label6.Text = "IP地址:" + SystemUtil.GetIp();label7.Text = "MAC地址:" + SystemUtil.GetMac();if (btnDetection.Text == "开始"){timer1.Start();btnDetection.Text = "停止";}else{timer1.Stop();btnDetection.Text = "开始";}}private void timer1_Tick(object sender, EventArgs e){label8.Text = "系统内存:" + SystemUtil.GetSysMemory();label9.Text = "剩余内存:" + SystemUtil.GetUnUsedMemory();label10.Text = "使用内存:" + SystemUtil.GetUsedMemory();label11.Text = "当前应用内存:" + SystemUtil.GetCurrentAppMemory();label12.Text = "微信使用内存:" + SystemUtil.GetAppMemory("WeChat");label13.Text = "CPU占用率:" + SystemUtil.GetUsedCPU();label14.Text = "磁盘使用率:" + SystemUtil.GetUsedDisk();}

实现效果:

由简入繁,拿来即用

更多精彩,请持续关注公众号:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDComponentForAndroid:探索Android组件化方案

在现代Android应用开发中&#xff0c;随着应用规模的不断扩大&#xff0c;传统的单体应用架构已经无法满足快速迭代和维护的需求。组件化架构作为一种解决方案&#xff0c;可以将应用拆分成多个独立的模块&#xff0c;每个模块负责特定的功能&#xff0c;从而提高代码的可维护性…

PWR电源控制(低功耗模式)

1 PWR简介 1 程序后面是空循环&#xff0c;即使不用也会耗电&#xff0c;所以有了低功耗&#xff08;例如遥控器&#xff09; 2 也要保留唤醒模式&#xff0c;如串口接收数据中断唤醒&#xff0c;外部中断唤醒&#xff0c;RTC闹钟唤醒&#xff0c;在需要工作是&#xff0c;ST…

【redis】redis的特性和主要应用场景

文章目录 redis 的特性在内存中存储数据可编程的扩展能力持久化集群高可用快 redis 的应用场景实时数据存储缓存消息队列 redis 的特性 redis 的一些特性&#xff08;优点&#xff09;成就了它 在内存中存储数据 In-memory data structures MySQL 主要是通过“表”的方式来…

分享基于PDF.JS的移动端PDF阅读器代码

一、前言 在之前的文章《分享基于PDF.js的pdf阅读器代码》里提到了PC端基于PDF.js的阅读器&#xff0c;本文将提供针对移动端的版本。 二、pdfViewer 为了能够直接使用&#xff0c;这里分享一下经过简单修改后能直接使用的pdfViewer代码&#xff1a; pdfViewer代码目录&…

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…

基于Pytorch框架的深度学习U2Net网络精细天空分割系统源码

第一步&#xff1a;准备数据 头发分割数据&#xff0c;总共有10276张图片&#xff0c;里面的像素值为0和1&#xff0c;所以看起来全部是黑的&#xff0c;不影响使用 第二步&#xff1a;搭建模型 级联模式 通常多个类似U-Net按顺序堆叠&#xff0c;以建立级联模型&#xff0c…

移动端视频编辑SDK解决方案,AI语音识别添加字幕

对于众多Vlog创作者而言&#xff0c;繁琐的字幕添加过程往往成为提升内容质量的绊脚石。为了彻底改变这一现状&#xff0c;美摄科技凭借其深厚的AI技术积累与创新的移动端视频编辑SDK解决方案&#xff0c;推出了革命性的AI语音识别添加字幕功能&#xff0c;让视频创作更加高效、…

【数据结构】LinkedList ------ java实现

知识框架图&#xff1a; LinkedList是一种常用的数据结构。底层是一个双向链表。每个节点包含数据以及指向前一个节点和后一个节点的引用。 一&#xff1a;LinkedList的使用 1.1 LinkedList的构造方法 方法 解释LinkedList() 无参构造public LinkedList(Collection<? exte…

免费的月考成绩发布小程序

月考成绩出炉&#xff0c;老师们便开始了一项既繁琐又耗时的工作&#xff1a;将成绩单私信给每位学生家长。需要老师们在繁忙的教学工作中抽出自己额外休息的时间&#xff0c;还要确保每位家长都能及时准确的收到自己孩子的成绩单。然而&#xff0c;随着科技的发展&#xff0c;…

Delphi5数据控制组件——查询

文章目录 效果图参考查询Free方法Close方法总结通俗理解 完整代码 效果图 参考 本文是在上一篇的基础上&#xff0c;将查询页面重新写一次。 查询 {点击查询} procedure TForm2.Button1Click(Sender: TObject); vartj,tj1,tj2,tj3,tj4,tj5,tj6,tj7:string; begin//按照工号查…

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建 首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件…

[ios]准备好app后使用xcode发布ios操作

在app代码完成后&#xff0c;点击xcode进行发布

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。在当今数字化浪潮推动下&#xff0c;船舶制造业正经历着前所未有的变革。为了应对市场的快速变化&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强国际竞争力&#xff0c;船舶机械设…

【无人机设计与控制】旋转无人机摆锤的SDRE仿真

摘要 旋转无人机摆锤&#xff08;Double Rotor Pendulum, DRP&#xff09;系统的稳定性控制是现代飞行控制领域的一个挑战性课题。本文采用了状态依赖黎卡提方程&#xff08;SDRE&#xff09;方法对该系统进行建模和仿真&#xff0c;以实现摆锤的稳定控制。通过SDRE方法&#…

内卷时代无人机培训机构如何做大做强

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;“内卷”一词频繁被提及&#xff0c;反映了各行业竞争日益激烈的现象。对于无人机培训行业而言&#xff0c;如何在这样的时代背景下脱颖而出&#xff0c;实现做大做强的目标&#xff0c;成为每个培训机构必须深思的问题。…

ComfyUI+Krea免费利用AI制作网站萌宠IP,五步搞定制作AI萌宠

大家好&#xff0c;这是我们网站的萌宠——Meo喵&#xff0c;是一只猫咪AI工具专家&#x1f43e;&#xff0c;嘻嘻&#x1f389;&#x1f431;。是AIGC年轻的艺术家星之&#xff0c;利用AI产品ComfyUI、Krea&#xff0c;搭配PS制作而成&#xff0c;下面先介绍一下它的形象&…

COD论文笔记 Adaptive Guidance Learning for Camouflaged Object Detection

论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点如下&#xff1a; 动机&#xff1a; 论文的核心动机是解决伪装目标检测&#xff08;COD&#xff09;中的挑战性任务。伪装目标检测旨在识别和分割那些在视觉上与周围环境高度相似的目标&#xff0c;这对于计算…

Bev pool 加速(2):自定义c++扩展

文章目录 1. c++扩展2. 案例2.1 案例12. 1.1 代码实现(1) c++ 文件(2) setup.py编写(3) python 代码编写2.1 案例1在bevfusion论文中,将bev_pooling定义为view transform中的效率瓶颈,bevfusion 主要就是对bev_pooling进行了加速,使得视图转换的速度提高了40倍,延迟从500ms…

假期学习-- iOS 通知详解

iOS 通知详解 数据结构 从我们之前使用通知的流程和代码来看&#xff0c;通知其实就是一个单例&#xff0c;方便随时访问。 NSNotificationCenter&#xff1a;消息中心 这个单例类中主要定义了两个表&#xff0c;一个存储所有注册通知信息的表的结构体&#xff0c;一个保存…

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础&#xff1a;WAV专题&#xff08;6&#xff09;——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道&#xff0c;通过FFprobe命令可以打印WAV音频文件每个packet&#xff08;也称为数据包或多媒体包&#xff09;的信息&#xff0…