一尘不染

如何获得CPU温度?

c#

我需要为正在开发的应用程序收集一些系统信息。使用C#可以轻松获得可用内存和CPU负载。不幸的是,CPU温度并不是那么容易。我尝试使用WMI,但无法使用任何东西

Win32_TemperatureProbe

要么

MSAcpi_ThermalZoneTemperature

有没有人处理过这个问题?我想知道像SiSoftware Sandra这样的监视程序如何获得该信息…

以防万一有人感兴趣,下面是该类的代码:

public class SystemInformation
{
    private System.Diagnostics.PerformanceCounter m_memoryCounter;
    private System.Diagnostics.PerformanceCounter m_CPUCounter;

    public SystemInformation()
    {
        m_memoryCounter = new System.Diagnostics.PerformanceCounter();
        m_memoryCounter.CategoryName = "Memory";
        m_memoryCounter.CounterName = "Available MBytes";

        m_CPUCounter = new System.Diagnostics.PerformanceCounter();
        m_CPUCounter.CategoryName = "Processor";
        m_CPUCounter.CounterName = "% Processor Time";
        m_CPUCounter.InstanceName = "_Total"; 
    }

    public float GetAvailableMemory()
    {
        return m_memoryCounter.NextValue();
    }

    public float GetCPULoad()
    {
        return m_CPUCounter.NextValue();
    }

    public float GetCPUTemperature()
    {
        //...
        return 0;
    }
}

阅读 458

收藏
2020-05-19

共1个答案

一尘不染

我非常确定这取决于制造商,因为可以通过I / O端口访问它们。如果您要使用特定的电路板,请尝试阅读手册和/或与制造商联系。

如果您想对许多不同的主板执行此操作,建议您与SiSoftware之类的人联系,或者准备阅读大量主板手册。

另一个要注意的是,并非所有的主板都有温度监控器。

您还可能会遇到从内核获得特权访问的问题。

2020-05-19