C#获取CPU的频率

    用SolidWorks画图的时候,有时候会开启多个SW的窗口,一旦窗口多开,用了一段时间之后,CPU的频率就会下降,软件就会变得非常卡,我经常开着任务管理器,将任务管理器窗口显示的非常简洁,来只显示CPU的频率,供我判断是不是要重启SolidWorks了,但是我依旧觉得这个窗口有点大了。而且也不方便,每次开机需要打开,另外也阻碍了我查看电脑的进程。

image.png

   用就要极简,不要那些假动作!那就在网上搜段代码来写个显示CPU频率吧,但是很无语的搜出来的都是CPU的占用率,感觉很不爽,我要的是CPU频率,不是CPU占用率,可能是百度不理解我的意思!

    那就只好自己照葫芦画瓢写一个算了,反正网上有大牛现成的库可以调用,最后的效果如下(窗口小,就对了):

image.png

----------------------------------------------------------------------

采用的是OpenHardwareMonitor库(项目地址:https://openhardwaremonitor.org/),VS里面直接NuGet搜一下,第一个就是的,直接安装,然后引用:

using OpenHardwareMonitor.Hardware;

剩余主要代码如下:

Computer computer = new Computer();
computer.Open();
computer.CPUEnabled = true;
for (int i = 0; i < computer.Hardware.Length; i++)
            {
                //循环找到HardwareType为cpu,然后显示每一个CPU的核心频率
            if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                {
                    for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                    {
                        if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Clock)
                        {
                            textBox1.Text = textBox1.Text + computer.Hardware[i].Sensors[j].Value.ToString() + "\r\n";
                        }
                    }
                }
            }

以上代码显示所有的核心代码的频率,直接加上Clock事件,每1秒执行一次就能刷新了。

因为我的CPU有6个核心,所以显示了6个频率,我看了下,6个频率都差不多,我直接取其中一个算了,然后直接显示出来,这样的话,程序执行起来占用的资源应该又更小一些。

直接调试跟踪,发现computer.Hardware[0].Sensors[14]显示的就是第一个核心的频率,直接

float f = (float)computer.Hardware[0].Sensors[14].Value/1000; //获取第一个CPU核心的频率,一共6个呢,我就取第一个吧,省事。
label1.Text =f.ToString("F2")+"GHz";  //保留两位有效数字
if (f < 3.2) { label1.ForeColor=Color.Red; }    //频率小于3.2GHz时,字体变红

记得要除以1000,换算成GHz。

剩下的就是优化窗口,设定窗口默认悬停位置,始终前端显示。最后将程序加入到启动项,每次开机启动。

最后,咱们看看官方出品的电脑硬件监控软件:

image.png

  • 评论列表:
  •  访客
     发布于 2024-02-29 08:57:28  回复
  • 大神啊,我辈楷模

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。