在这里插入图片描述

前言

我们开发的上位机软件经常会遇到卡顿的情况,卡顿的原因很多种,有一种就是电脑的内存被占满了,所以监控内存的利用率能够有效的判断上位机软件卡顿是否由电脑内存导致。

代码

下面代码中通过PerformanceCounter类来获取可用内存;通过ComputerInfo类来获取电脑总的内存;用总内存减去可用内存就等于已经被使用的内存;用被使用内存除以总内存就等于内存使用率,如果内存使用率达到90%以上,说明这时候内存已经几乎被沾满了,这时候就需要增加内存或者查看软件内部是不是有资源没有被及时释放。

 public partial class Form1 : Form
    {
        private PerformanceCounter memoryCounter;
        public Form1()
        {
            InitializeComponent();
            memoryCounter = new PerformanceCounter("Memory", "Available MBytes");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = GetMemoryUsagePercentage().ToString ("p2");
        }
        public float GetMemoryUsagePercentage()
        {
            // 获取可用内存(GB)
            float availableMemoryMB = memoryCounter.NextValue()/1024;
            lbl_available.Text = availableMemoryMB.ToString();

            // 获取总物理内存(GB)
            var computerInfo = new Microsoft.VisualBasic.Devices.ComputerInfo();
            float totalMemoryMB = computerInfo.TotalPhysicalMemory / (1024 * 1024)/1024;
            lbl_all.Text = totalMemoryMB.ToString();

            // 计算使用率
            float usedMemoryMB = totalMemoryMB - availableMemoryMB;
            lbl_used.Text = usedMemoryMB.ToString();
            float usagePercentage = (usedMemoryMB / totalMemoryMB) ;
            return usagePercentage;
        }
    }

注意事项:

1)使用ComputerInfo类需要引用Microsoft.VisualBasic.dll,如下图。
在这里插入图片描述
2)使用PerformanceCounter类可能会报下面的错误

System.InvalidOperationException:“无法加载计数器名称数据,因为从注册表读取的索引“”无效

解决办法如下:使用命令行修复
cmd

以管理员身份运行命令提示符,执行以下命令:

lodctr /R

如下图:
在这里插入图片描述
在这里插入图片描述

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》

公告

已订阅专栏或学习交流C#,请加文章最下方的qq群。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐