From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
WPFProject/ResourceListener.cs | 133 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 133 insertions(+), 0 deletions(-)
diff --git a/WPFProject/ResourceListener.cs b/WPFProject/ResourceListener.cs
new file mode 100644
index 0000000..3759620
--- /dev/null
+++ b/WPFProject/ResourceListener.cs
@@ -0,0 +1,133 @@
+锘縰sing log4net;
+using System;
+using System.Diagnostics;
+using System.Management;
+using System.Timers;
+
+namespace WPFProject
+{
+ public class RunTimeState
+ {
+ public float cpuRate { get; set; }
+ public double remRate { get; set; }
+
+ public float totalCpuRate { get; set; }
+ public double totalRemRate { get; set; }
+ }
+
+ public class ResourceListener
+ {
+ public event EventHandler<RunTimeState> RefreshEvent;
+ private Timer timer;
+ private System.Threading.CancellationTokenSource _can;
+
+ private static ResourceListener instance;
+ public static ResourceListener Instance
+ {
+ get
+ {
+
+ if (instance == null)
+ {
+ instance = new ResourceListener();
+ }
+ return instance;
+ }
+ }
+ private ILog log = LogManager.GetLogger("ResourceListener");
+
+ // CPU鍗犵敤
+ private PerformanceCounter totalCpuCounter;
+
+ private PerformanceCounter cpuCounter;
+
+ private ResourceListener()
+ {
+ totalCpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
+ cpuCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName, true);
+ }
+
+ public void Start()
+ {
+ _can = new System.Threading.CancellationTokenSource();
+ Refresh();
+ timer = new Timer();
+ timer.AutoReset = false;
+ timer.Interval = 30000;
+ timer.Elapsed += Timer_Elapsed;
+ timer.Enabled = true;
+ }
+
+ private void Refresh()
+ {
+ try
+ {
+ var _cpuCount = Environment.ProcessorCount;
+ ObjectQuery wql = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher(wql);
+
+ string prcName = Process.GetCurrentProcess().ProcessName;
+ var counter_Exec = new PerformanceCounter("Process", "Working Set - Private", prcName);
+ ulong dWsp_Exec = (ulong)(counter_Exec.RawValue / 1024);
+
+ var totalCpuRate = totalCpuCounter.NextValue();
+ var cpuRate = cpuCounter.NextValue() / _cpuCount;
+
+ foreach (ManagementObject obj in searcher.Get())
+ {
+ ulong totalVisibleMemorySize = (ulong)obj["TotalVisibleMemorySize"];
+ ulong freePhysicalMemory = (ulong)obj["FreePhysicalMemory"];
+
+ ulong usedMemory = totalVisibleMemorySize - freePhysicalMemory;
+ string info = $"\r\n鎬诲唴瀛�: {totalVisibleMemorySize / 1024} MB\r\n";
+
+ info += $"宸蹭娇鐢ㄥ唴瀛�: {usedMemory / 1024} MB\r\n";
+ double usagePercent = usedMemory * 100d / totalVisibleMemorySize;
+ info += $"鍐呭瓨鍗犵敤鐜�: {usagePercent:F2}%\r\n";
+
+ info += $"搴旂敤鍗犵敤鍐呭瓨: {dWsp_Exec / 1024} MB\r\n";
+ double appPercent = dWsp_Exec * 100d / totalVisibleMemorySize;
+ info += $"搴旂敤鍐呭瓨鍗犵敤鐜�: {appPercent:F2}%";
+ RefreshEvent?.Invoke(this, new RunTimeState
+ {
+ cpuRate = cpuRate,
+ remRate = appPercent,
+ totalCpuRate = totalCpuRate,
+ totalRemRate = usagePercent
+ });
+ if (usagePercent > 80)
+ {
+ log.Info(info);
+ //AlarmUtil.CreateAlarm("App", "鍐呭瓨鍗犵敤杩囬珮锛岃秴80%", out _);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Error("Refresh Resource Error.", ex);
+ }
+ }
+
+ private void Timer_Elapsed(object sender, ElapsedEventArgs e)
+ {
+ try
+ {
+ timer.Enabled = false;
+ _can.Token.ThrowIfCancellationRequested();
+ Refresh();
+ timer.Enabled = true;
+ }
+ catch
+ {
+
+ }
+ }
+
+ public void Stop()
+ {
+ _can?.Cancel();
+ _can?.Dispose();
+ instance = null;
+ }
+ }
+}
--
Gitblit v1.9.1