常时间运行的程序 导致系统卡顿 自动监控系统CPU和内存利用率 自动选择 内存回收 软件重启 电脑重启

长时间运行安防系统,导致CPU或内存利用率超80%,使得电脑变的缓慢、卡顿的问题。定时获取CPU和内存利用率的数据,在不同时间段(如凌晨与平时),根据利用率的不同的阈值,进行:内存回收(70%)、重启软件(80%)、重启电脑(90%&凌晨)等操作,以确保电脑和安防系统流畅;此功能可以在配置文件中选择关闭(默认关闭)或开启(根据情况手动开启),利用率的阈值可配置,系统自检频率可配置

 


appsettings.json 配置文件
{"TimerTick": 0, // [系统自检]频率,单位:毫秒,(0为不检查,60000一分钟,300000五分钟,600000十分钟...)"ConfigTime": "1:00,3:00", //[系统自检]可重启电脑时间,时间从小到大,如 1:00,5:00 即:1点到5点之间,发生卡顿可重启电脑"SwitchKey": "80,85,90", //[系统自检]CPU&内存,利用率阈值,3个数字为一组,数字从小到大,如:80严重,85较严重,90非常严重...70,80,90...80,85,90...
}

MainForm.cs 程序文件
//获取配置
public static int TimerTick = Tools.ToInt32(CustomConfigManager.GetConfig("TimerTick"), 0);
public static string ConfigTime = Tools.ToString(CustomConfigManager.GetConfig("ConfigTime"), "1:00,5:00");
public static string SwitchKey = Tools.ToString(CustomConfigManager.GetConfig("SwitchKey"), "80,85,90");private System.Windows.Forms.Timer timer3;//系统检查//窗口加载
public void MainForm_Load(object sender, EventArgs e)
{if (TimerTick > 0){timer3 = new System.Windows.Forms.Timer();timer3.Interval = TimerTick;timer3.Tick += OnTimeTick3;timer3.Start();}
}//定时程序
private async void OnTimeTick3(object sender, EventArgs e)
{SYS_CHECK();
}//系统检查
public async void SYS_CHECK()
{await Task.Run(() =>{float cpuUsage = GetCpuUsage();//cpu利用率float memoryUsage = GetMemoryUsage();//内存利用率 try{DateTime dt = DateTime.Now;//现在DateTime dt1 = Convert.ToDateTime(dt.ToString("yyyy-MM-dd 01:00:00"));//凌晨1点DateTime dt2 = Convert.ToDateTime(dt.ToString("yyyy-MM-dd 05:00:00"));//凌晨5点if (!string.IsNullOrWhiteSpace(ConfigTime)){string[] arr = ConfigTime.Split(',');if (arr.Length > 1){DateTime dTemp1 = dt1;DateTime dTemp2 = dt2;DateTime.TryParse(dt.ToString($"yyyy-MM-dd {arr[0]}"), out dTemp1);//凌晨1点DateTime.TryParse(dt.ToString($"yyyy-MM-dd {arr[1]}"), out dTemp2);//凌晨5点if (dTemp1 < dTemp2){dt1 = dTemp1;dt2 = dTemp2;}}}int minUsage = 80;//较严重int midUsage = 85;//挺严重int maxUsage = 90;//特严重string[] arrUsage = SwitchKey.Split(',');if (arrUsage.Length > 0 && arrUsage.Length > 2){arrUsage = arrUsage.OrderBy(a => a).ToArray();int.TryParse(arrUsage[0], out minUsage);//小int.TryParse(arrUsage[1], out midUsage);//中int.TryParse(arrUsage[2], out maxUsage);//大}if (dt > dt1 && dt < dt2)//凌晨{if (cpuUsage > midUsage || memoryUsage > midUsage)//85;//挺严重{shutdown();//...重启电脑...}else if (cpuUsage > minUsage || memoryUsage > minUsage)//80;//较严重{restart();//...重启程序...}}else//凌晨以外的时间(千万别重启电脑){if (cpuUsage > maxUsage || memoryUsage > maxUsage)//90;//特严重{restart();//...重启程序...}else if (cpuUsage > midUsage || memoryUsage > midUsage)//85;//挺严重{GC_Collect();//...内存回收...}}}catch { }finally { }});
}//获取CPU利用率
public float GetCpuUsage()
{try{using (PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total")){// 开始时间cpuCounter.NextValue();System.Threading.Thread.Sleep(2000); // 等待// 获取CPU使用率float cpuUsage = cpuCounter.NextValue();//Console.WriteLine($"CPU Usage: {cpuUsage}%");//cpuLabel.Text = $"CPU 占用率: {cpuUsage:F2}%";return cpuUsage;}}catch{return 0;}
}//获取内存利用率
public float GetMemoryUsage()
{try{using (var memoryCounter = new PerformanceCounter("Memory", "Available MBytes")){// 获取可用内存(MB)float availableMemory = new PerformanceCounter("Memory", "Available MBytes").NextValue();// 获取系统总物理内存(MB)long totalMemory = (long)new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory / (1024 * 1024);// 计算内存使用率float memoryUsage = (totalMemory - availableMemory) / totalMemory * 100;//memoryLabel.Text = $"内存占用率: {memoryUsage:F2}%";return memoryUsage;}}catch{return 0;}
}//重启电脑
public void shutdown()
{//...重启电脑...ProcessStartInfo psi = new ProcessStartInfo("shutdown", "/r /f /t 0");// 设置是否使用操作系统外壳程序启动进程psi.UseShellExecute = false;// 创建一个新的进程并启动它Process.Start(psi);
}//重启软件
public void restart()
{string executablePath = Application.ExecutablePath;//本程序路径string arguments = "/skipLogin";//参数:跳过登录Process.Start(executablePath, arguments);//开启一个新的程序Application.Exit();//当前程序关闭退出
}//内存回收
public void GC_Collect()
{GC.Collect();GC.WaitForPendingFinalizers();GC.Collect();
}

Program.cs 程序入口文件
using Dm.filter;
using IntelligentSubstationCore.LightEquipment.LightControl;
using IntelligentSubstationCore.Security;namespace IntelligentSubstationCore
{internal static class Program{[STAThread]static void Main(string[] args){bool skipLogin = false;if (args.Length > 0 && args[0] == "/skipLogin"){skipLogin = true;}if (skipLogin){Application.Run(new AutoLogin());//自动登录页}else{Application.Run(new Login());//登录页面}}}
}

AutoLogin.cs 自动登录 和 Login.cs 手动登录(略)

说明:将之前登录用户的部分登录信息(不包括账号和密码)保存到缓存中(如Redis),取出来验证并自动登录一下,并加载相关数据(AutoLogin.cs大部分代码都在Login.cs里,一样的都执行一遍),跳过登录过程只有数据加载过程,无缝实现软件重启,释放内存、缓存、Redis等...

如果模拟登录AutoLogin.cs失败(验证失败、登录失败、token失败...),则强行进入登录页面Login.cs 重新登录...


强行重启电脑

  ProcessStartInfo psi = new ProcessStartInfo("shutdown", "/r /f /t 0");

是 C# 中用于启动系统关机命令的代码,其中的参数对应 Windows 系统的 shutdown 命令选项。以下是各参数的详细说明:

shutdown 命令基本语法

plaintext

shutdown [/参数1] [/参数2] [...]

关键参数解析

1. /r:重启计算机
  • 作用:执行重启操作,等同于先关机再开机。
  • 替代参数
    • /s:仅关机(不重启)。
    • /l:注销当前用户(相当于 “退出登录”)。
2. /f:强制关闭程序
  • 作用:强制关闭所有未响应的应用程序,不显示确认提示。
  • 场景:当程序无响应或需要快速重启时使用。
  • 注意:可能导致未保存的数据丢失。
3. /t 0:设置超时时间
  • /t:指定执行操作前的等待秒数(超时时间)。
  • 0:立即执行,无延迟。

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

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

相关文章

OpenCV播放摄像头视频

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 播放摄像头视频和播放视频文件类似&#xff0c;也是通过类VideoCapture来实现&#xff0c;只不过调用open的时候传入的是摄像头的索引号。如果计算机安装了一个摄像头&#xff0c;则open的第一个参数通常是0&…

操作系统:内存管理

目录 1、主要目标 2、核心概念和技术 2.1 物理内存与虚拟内存 2.2 内存分页机制 2.3 页面置换算法 3、监控与性能优化 3.1 查看物理内存 3.2 查看虚拟内存 3.3 性能问题 1> 内存不足&#xff08;OOM&#xff09; 2> 内存泄漏 3> 内存碎片 3.4 性能优化策…

专题四:综合练习( 找出所有子集的异或总和再求和)

以leetcode1863题为例 题目分析&#xff1a; 找到每个子集&#xff0c;然后子集中的元素异或之后全部相加 算法原理分析&#xff1a; 画决策树&#xff1a;第一层为这个子集有一个元素 第二层这个子集有两个元素 从上往下罗列&#xff0c;把所有子集都罗列出来&#xf…

【python】—conda新建python3.11的环境报错

1.报错 conda create -n py3.11 python3.11 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ Collecting package metadata: done Solving environment: failed PackagesNotFoundError: The following packages are not available from current channel…

RabbitMQ事务机制

在RabbitMQ中&#xff0c;生产者为了确保消息发送成功&#xff0c;一种是使用 confirm 确认机制&#xff0c;另一种就是使用事务机制&#xff0c;事务机制就是允许生产者在发送消息时&#xff0c;将多个消息操作作为一个原子单元进行处理&#xff0c;要么所有操作都成功执行&am…

两台笔记本电脑直接通过HDMI线连接?

两台笔记本电脑直接通过HDMI线连接通常无法实现屏幕共享或数据传输&#xff0c;因为HDMI接口设计主要用于单向音视频输出(如连接显示器或电视)。以下是详细分析和替代方案&#xff1a; 为什么HDMI直连两台电脑不适用&#xff1f; 接口功能限制&#xff1a;• 大多数笔记本电脑的…

CentOS 和 RHEL

CentOS 和 RHEL&#xff08;Red Hat Enterprise Linux&#xff09;关系非常紧密&#xff0c;简而言之&#xff1a; CentOS 最初是 RHEL 的免费、开源克隆版&#xff0c;几乎与 RHEL 二进制兼容。 CentOS 原是 RHEL 的“免费双胞胎”&#xff0c;但已被放弃&#xff0c;现在推荐…

使用光标测量,使用 TDR 测量 pH 和 fF

时域反射计 &#xff08;TDR&#xff09; 是一种通常用于测量印刷电路板 &#xff08;PCB&#xff09; 测试试样和电缆阻抗的仪器。TDR 对于测量过孔和元件焊盘的电感和电容、探针尖端电容和电感&#xff0c;甚至寄生电感收发器耦合电容器也非常有用。这也是验证仿真或提取您自…

9.9 Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析

Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析 关键词:Ollama 私有化部署, Mistral 7B 运行, 本地大模型管理, 命令行交互, REST API 集成 一、Mistral 7B 模型特性解析 Mistral 7B 是由 Mistral AI 团队开发的高性能开源大语言模型,在同等参数量级模型…

vscode与keil的乱码不兼容问题

都用英文注释 中文注释的话&#xff0c;打开vscode的自动识别格式,如下 解决VSCode中文乱码 自动识别也可以设置识别优先级&#xff0c;把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312) 4.!!!在暂存更改的时候&#xff0c;不要把vscode的设置给暂存了&#xff…

大模型中的KV Cache

1. KV Cache的定义与核心原理 KV Cache&#xff08;Key-Value Cache&#xff09;是一种在Transformer架构的大模型推理阶段使用的优化技术&#xff0c;通过缓存自注意力机制中的键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;矩阵&#xff0c;避免重复计算&…

Maven 公司内部私服中央仓库搭建 局域网仓库 资源共享 依赖包构建共享

介绍 公司内部私服搭建通常是为了更好地管理公司内部的依赖包和构建过程&#xff0c;避免直接使用外部 Maven 中央仓库。通过搭建私服&#xff0c;团队能够控制依赖的版本、提高构建速度并增强安全性。公司开发的一些公共工具库更换的提供给内部使用。 私服是一种特殊的远程仓…

文档外发安全:企业数据防护的最后一道防线

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。随着网络安全威胁日益增多&#xff0c;企业安装专业加密软件已从"可选"变为"必选"。本文将全面分析企业部署华途加密解决方案后获得的各项战略优势。 一、数据安全防护升级 核心数据全面保护…

【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)

【ArcGIS】根据shp范围生成系列等距点 目标1&#xff1a;生成边界外一定范围、并且等间距分布的点&#x1f4c1; 所需数据&#xff1a;操作步骤-ArcGIS代码处理-Python 目标2&#xff1a;生成等距渔网点&#x1f4c1; 所需数据&#xff1a;代码处理-Python 参考 目标1&#xff…

Docker 环境安装(2025最新版)

Docker在主流的操作系统和云平台上都可以使用&#xff0c;包括Linux操作 系统&#xff08;如Ubuntu、 Debian、Rocky、Redhat等&#xff09;、MacOS操作系统和 Windows操作系统&#xff0c;以及AWS等云平 台。 Docker官网&#xff1a; https://docs.docker.com/ 配置宿主机网…

Java并发编程-线程池(二)

文章目录 线程池的实现原理execute(Runnable command)**1. 阶段一&#xff1a;尝试创建核心线程****2. 阶段二&#xff1a;尝试将任务加入队列****3. 阶段三&#xff1a;尝试创建非核心线程或拒绝任务****关键机制与设计思想** 线程池的实现原理 当向线程池提交一个任务之后&a…

清华大学开源软件镜像站地址

清华大学开源软件镜像站&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/

脑机接口技术:开启人类与机器融合的新时代

摘要 脑机接口&#xff08;BCI&#xff09;技术作为一项前沿科技&#xff0c;正在逐步打破人类与机器之间的沟通障碍&#xff0c;为医疗、娱乐、教育等多个领域带来前所未有的变革。本文将详细介绍脑机接口技术的基本原理、发展现状、应用场景以及面临的挑战和未来发展趋势&…

2025前端面试遇到的问题(vue+uniapp+js+css)

Vue相关面试题 vue2和vue3的区别 一、核心架构差异 特性Vue2Vue3响应式系统基于Object.defineProperty基于Proxy&#xff08;支持动态新增/删除属性&#xff09;代码组织方式Options API&#xff08;data/methods分块&#xff09;Composition API&#xff08;逻辑按功能聚合&am…

Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解

Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解 目录 Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解效果一览基本介绍程序设计参考资料效果一览 基本介绍 Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解 可直接运行 分解效果好 适合作为创新点(Matlab完整源码和数据),…