常時間運行的程序 導致系統卡頓 自動監控系統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.pswp.cn/news/905330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905330.shtml
英文地址,請注明出處:http://en.pswp.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完整源碼和數據),…