本段代码是一个封装的用户控件
在这里插入图片描述

<UserControl x:Class="YF_Frame.PerformanceMonitor"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" ><lvc:CartesianChart Series="{Binding SeriesCollection}" LegendLocation="Right" Background="{DynamicResource BackgroundBrush}" Foreground="{DynamicResource TextBrush}"><lvc:CartesianChart.AxisY><lvc:Axis Title="使用率 (%)" LabelFormatter="{Binding YFormatter}" MinValue="0" MaxValue="100" Foreground="{DynamicResource TextBrush}"></lvc:Axis></lvc:CartesianChart.AxisY><lvc:CartesianChart.AxisX><lvc:Axis Title="时间" Labels="{Binding Labels}" Foreground="{DynamicResource TextBrush}"></lvc:Axis></lvc:CartesianChart.AxisX></lvc:CartesianChart>
</UserControl>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using LiveCharts.Defaults;
using LiveCharts.Wpf;
using LiveCharts;
using System.Management;
using System.Diagnostics;
using System.Windows.Threading;
using System.ComponentModel;namespace YF_Frame
{/// <summary>/// PerformanceMonitor.xaml 的交互逻辑/// </summary>public partial class PerformanceMonitor : UserControl, INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}public SeriesCollection SeriesCollection { get; set; }public string[] Labels { get; set; }public Func<double, string> YFormatter { get; set; }private PerformanceCounter cpuCounter;private PerformanceCounter ramCounter;public PerformanceMonitor(){InitializeComponent();SeriesCollection = new SeriesCollection{new LineSeries{Title = "CPU",Values = new ChartValues<ObservableValue>{new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0)},PointGeometry = DefaultGeometries.Circle,PointGeometrySize = 10},new LineSeries{Title = "内存",Values = new ChartValues<ObservableValue>{new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0),new ObservableValue(0)},PointGeometry = DefaultGeometries.Square,PointGeometrySize = 10}}; Labels = new[] { "1分钟前", "50秒前", "40秒前", "30秒前", "20秒前", "现在" };YFormatter = value => value.ToString("N0");DataContext = this;// 初始化CPU计数器(全局CPU使用率)cpuCounter = new PerformanceCounter("Processor",         // 类别(处理器)"% Processor Time",  // 计数器名称(CPU时间百分比)"_Total"             // 实例名称(_Total表示所有核心));// 初始化内存计数器(可用内存百分比)ramCounter = new PerformanceCounter("Memory",           // 类别(内存)"Available MBytes"   // 计数器名称(可用内存MB));// 启动定时器刷新数据(每1秒更新一次)DispatcherTimer timer = new DispatcherTimer();timer.Interval = TimeSpan.FromSeconds(5);timer.Tick += UpdatePerformanceData;timer.Start();}private void UpdatePerformanceData(object sender, EventArgs e){try{// 获取CPU使用率(取当前值)float cpuUsage = cpuCounter.NextValue();// 获取可用内存(MB)float availableMemoryMB = ramCounter.NextValue();// 计算已用内存(假设总内存16GB,你可以替换为实际值)float totalMemoryMB = 16 * 1024; // 16GB = 16 * 1024 MBfloat usedMemoryMB = totalMemoryMB - availableMemoryMB;float memoryUsagePercent = (usedMemoryMB / totalMemoryMB) * 100;// 更新图表数据UpdateChartData(cpuUsage, memoryUsagePercent);// 更新标签(可选:显示最新数据)Labels = new[] { "25秒前", "20秒前", "15秒前", "10秒前", "5秒前", "现在" };OnPropertyChanged(nameof(Labels)); // 通知UI更新}catch (Exception ex){// 由于 Windows 性能计数器损坏 => cmd lodctr / R}}private void UpdateChartData(float cpuUsage, float memoryUsage){// 获取当前CPU和内存的数据序列var cpuSeries = SeriesCollection[0].Values as ChartValues<ObservableValue>;var memorySeries = SeriesCollection[1].Values as ChartValues<ObservableValue>;// 移除最旧的数据点(保持6个数据点)if (cpuSeries.Count >= 6){cpuSeries.RemoveAt(0);memorySeries.RemoveAt(0);}// 添加新的数据点cpuSeries.Add(new ObservableValue(cpuUsage));memorySeries.Add(new ObservableValue(memoryUsage));}}
}

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

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

相关文章

Rust学习笔记(四)|结构体与枚举(面向对象、模式匹配)

本篇文章包含的内容1 结构体1.1 定义和初始化结构体1.2 Tuple Struct1.3 结构体方法&#xff08;Rust 面向对象&#xff09;1.4 关联函数2 枚举2.1 定义和使用枚举2.2 将数据附加到枚举的变体中2.3 Option 枚举2.4 模式匹配2.4.1 match语句2.4.2 if let语句1 结构体 1.1 定义和…

C++——分布式

文章目录一、什么是分布式&#xff1f;核心特点为什么需要分布式&#xff1f;分布式 vs 集中式常见分布式场景挑战与难点二、 简述下CAP理论2.1 简述2.2 详细三、 简述下分布式中的2PC2.1 详细3.2 简述三 、简述下Raft协议3.1 详细3.2 简述四 grpc框架4.1 RPC&#xff08;Remot…

Redis面试精讲 Day 20:Redis大规模部署性能调优

【Redis面试精讲 Day 20】Redis大规模部署性能调优 开篇 欢迎来到"Redis面试精讲"系列第20天&#xff01;今天我们将深入探讨Redis在大规模部署场景下的性能调优策略&#xff0c;这是高级工程师和架构师面试必考的核心知识点。本文将从操作系统配置、Redis参数调优…

[微服务]ELK Stack安装与配置全指南

目录 一、ELK相关介绍 1.1 什么是ELK Stack 1.2 ELK核心组件与功能 1.3 ELK优势 1.4 ES数据库结构对比SqlServer 二、安装ELK 2.1 window安装 2.2 Docker下环境搭建 2.2.1 安装7.16.3版本ElasticSearch 2.2.2 安装7.16.3版本Kibana : 2.2.3 安装8.0.0版本ElasticSea…

java项目怎么实现用户行为分析、漏斗转化、数据可视化报表。

在 Java 项目中实现用户行为分析、漏斗转化和数据可视化报表是一个系统性的工作&#xff0c;需要从数据采集、存储、分析到展示的完整链路设计。以下是一个可行的实现方案&#xff1a;1. 整体架构设计建议采用分层架构&#xff1a;数据采集层&#xff1a;收集用户行为数据数据存…

缓存元数据损坏操作步骤(lvmcache修复)

现象为:机械盘丢失cvol-cmeta卷如图所示,lvm逻辑卷中缺失缓存的lvm,这边以只读cache为例日志现象报错信息为:lvmcache_cvol failed manual repair required!lvmcache_cvol failed: manual repair required! 这类报错&#xff0c;本质上是 LVM cache 池&#xff08;cache-pool&…

使用CMAKE-GUI生成Visual Studio项目

使用CMAKE-GUI生成Visual Studio项目第一种&#xff0c;如果我们想把以Cmake构建的项目移植VS上&#xff0c;就可以使用Cmake来生成.sln文件 准备生成的目录文件先准备好我们要打包的源代码等文件&#xff08;放在resource下&#xff09;使用cmake-gui工具来构建&#xff08;命…

20道DOM相关前端面试题

DOM 相关面试题及答案 什么是 DOM&#xff1f;DOM 树的结构是怎样的&#xff1f; DOM&#xff08;文档对象模型&#xff0c;Document Object Model&#xff09;是 HTML/XML 文档的编程接口&#xff0c;将文档结构化为树形节点集合&#xff0c;允许程序动态访问和修改文档内容、…

CVE-2021-4300漏洞复现

Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Elasticsearch、MongoDB等数据库。在其版本1.12.0到4.6.2之间存在一处因为MySQL LOAD DATA LOCAL导致的文件读取漏洞。 一、伪造服务器 利用mysql-fake-serve…

【LeetCode题解】LeetCode 35. 搜索插入位置

【题目链接】 35. 搜索插入位置 【题目描述】 【题解】 通过题目可以知道这是一道经典的二分查找的题目&#xff0c;对于二分查找的题目&#xff0c;根据需要查找的两个边界点&#xff0c;分为两个不同的模板&#xff0c;如下图所示。 这道题要求在数组中查找目标值并返回其索…

RK3568 NPU RKNN(五):RKNN-ToolKit-lite2板端推理

文章目录1、前言2、目标3、安装RKNN-ToolKit-lite23.1、安装环境3.2、安装RKNN-ToolKit-lite23.3、验证4、完整的测试程序5、运行测试程序6、程序拆解7、总结1、前言 本文仅记录本人学习过程&#xff0c;不具备教学指导意义。 2、目标 之前提到过&#xff0c;RKNN-Toolkit2-…

二分查找。。

1 二分查找二分查找前提是数组有序。先令&#xff0c;left 0 , right 7mid (right left) / 2;如果mid的值大于要查找的值&#xff0c;则right mid - 1&#xff1b;如果小于&#xff0c;left mid 1&#xff1b;如果mid的值等于要查找的值&#xff0c;查找成功。重复步骤2…

Spring Ai 如何配置以及如何搭建

Spring Ai 如何配置以及如何搭建 解释什么是Spring ai 首先&#xff0c;我们用Spring ai 其实不是去了解他的LLM,以及底层用的一些东西&#xff0c;Spring AI,提供给我们的其实是对各种大模型快速调用&#xff0c;提供了大模型API的作用&#xff0c;Spring AI 的核心定位是提…

FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新

据悉&#xff0c;三星(SSNGY.US)XR头显Project Moohan目前已获得美国FCC认证&#xff0c;FCC认证表明该款头显即将上市&#xff0c;之前三星财报会议也表明确认将于今年年底推出XR头显。此前有报道称&#xff0c;该设备将采用索尼旗舰级 OLEDoS 显示屏&#xff0c;像素密度高达…

洛谷P1595讲解(加强版)+错排讲解

前言接我原先的文章&#xff0c;因为一场考试&#xff0c;让我对这道题记忆深刻注&#xff1a;&#xff08;因为那道题&#xff0c;所以80分&#xff09;正文1.分析题目题目&#xff1a;某人写了 n 封信和 n 个信封&#xff0c;如果所有的信都装错了信封。求所有信都装错信封共…

提升化工制造质量的 7 种方法

尽管化工制造属于制造业的一个子类别&#xff0c;但它是一个广泛的范畴&#xff0c;涵盖了基础化学品、树脂和合成纤维、农药和化肥、涂料和粘合剂&#xff0c;甚至消费类化合物&#xff08;如肥皂和清洁化学品&#xff09;等所有领域。尽管这些细分领域差异巨大&#xff0c;但…

从“数据垄断”到“全民共建”:Dataparts如何重构智能时代的数据流通规则?

从“数据垄断”到“全民共建”&#xff1a;Dataparts如何重构智能时代的数据流通规则&#xff1f;在杭州某科技园区的会议室里&#xff0c;一场关于“AI大模型训练数据”的讨论正在激烈进行。某头部AI企业的技术总监指着屏幕上的“对话场景零件库”说&#xff1a;“过去我们花3…

31 HTB Union 机器 - 中等难度

第一阶段 侦查nmap扫描oxdfparrot$ nmap -p- --min-rate 10000 -oA scans/nmap-alltcp 10.10.11.128 Starting Nmap 7.80 ( https://nmap.org ) at 2021-11-19 08:29 EST Nmap scan report for 10.10.11.128 Host is up (0.092s latency). Not shown: 65534 filtered ports POR…

【数据分享】上市公司创新韧性数据(2007-2023)

数据介绍核心看点&#xff1a; 在复杂多变的市场环境中&#xff0c;企业如何通过创新维持竞争力&#xff1f;创新韧性是衡量企业在外部冲击下保持创新活力的关键指标。本文分享2007-2023年上市公司创新韧性数据&#xff0c;为研究企业抗风险能力提供核心支持。数据概览数据名称…

服务器配置开机自启动服务

一、配置启动文件sudo vim /etc/systemd/system/smartailab-backend.service sudo vim /etc/systemd/system/reall3d-frontend.servicesudo vim /etc/systemd/system/Culture_Liquor-backend.servicevim /etc/systemd/system/Culture_Liquor-backend.service内容&#xff1a;[U…