MSAcpi_ThermalZoneTemperature类不显示实际温度

6
我希望您能实时获取CPU性能数据,包括温度。我使用以下代码来获取CPU温度:
try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\WMI",
                "SELECT * FROM MSAcpi_ThermalZoneTemperature");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                double temp = Convert.ToDouble(queryObj["CurrentTemperature"].ToString());
                double temp_critical = Convert.ToDouble(queryObj["CriticalTripPoint"].ToString());
                double temp_cel = (temp/10 - 273.15);
                double temp_critical_cel = temp_critical / 10 - 273.15;
                lblCurrentTemp.Text = temp_cel.ToString();
                lblCriticalTemp.Text = temp_critical_cel.ToString();
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }

但是这段代码显示的温度并不是正确的温度。它通常显示49.5-50.5摄氏度。但我使用了“OpenHardwareMonitor”报告CPU温度超过71摄氏度,并且随着时间分数的变化而变化。在代码中是否有什么遗漏?
我在每500毫秒间隔的计时器_click事件中使用了上述代码来刷新温度读数,但始终显示相同的温度值,从执行开始就如此。这意味着如果您运行此应用程序并显示49度,则经过1小时会话后,它将不断显示49度。问题出在哪里?

在调用之间,queryObj["ThermalStamp"] 的值会改变吗? - Frédéric Hamidi
@FrédéricHamidi--我检查了ThermalStamp属性,在调用时它得到了8的值,但在调用之间从未改变... - user1134487
奇怪。你确定计时器在你认为的时间内进行了滴答,并且你的代码在每次滴答时都被调用了吗? - Frédéric Hamidi
输出的单位为开尔文的十分之一,您需要将其转换为摄氏度。 - MethodMan
1
这仅适用于笔记本电脑。对于99%的台式机,制造商不实现ACPI温度。 - leppie
显示剩余2条评论
1个回答

6
https://web.archive.org/web/20150911113852/http://www.scriptinternals.com/new/us/support/Internal/WMI_MSAcpi_ThermalZoneTemperature.htm上,我发现CurrentTemperature返回的是主板上某些热区的温度,而不是CPU的温度。这就像厨房里的温度是30摄氏度,但炉子的温度可能达到200摄氏度左右...这种方式无法准确显示CPU的温度。要获取CPU(以及每个核心)的精确温度,需要编写内核驱动程序,这要复杂得多。
总的来说,您的代码已经实现了应有的功能,但如果想要获取温度,您需要使用其他方法。

1
是的,你说得对。感谢回复。我后来发现使用微软的WMI类无法确定CPU温度。 - user1134487
@jchoudhury 只是想问一下,你有没有找到一些简单的方法来获取那些温度? - ST3
我还没有找到它。如果您有比WMI更好的解决方案,请与我分享。虽然感谢您的询问。 - user1134487
Speedfan是我找到的最可靠的解决方案。https://www.almico.com/sfdownload.php - trindflo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接