MSAcpi_ThermalZoneTength class не показывает фактическую температуру - PullRequest
3 голосов
/ 01 февраля 2012

Я хочу получить данные о производительности процессора в режиме реального времени, включая температуру.я использовал следующий код для получения температуры процессора:

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», который сообщает о температуре процессора выше 71 градуса по Цельсию и изменяет дроби вместе с долями времени.есть ли что-то, чего мне не хватает в коде?

Я использовал вышеуказанный код в событии timer_click для каждого интервала 500 мс, чтобы обновить показания температуры, но он всегда показывает одну и ту же температуру с начала выполнения.Это означает, что если вы запустите это приложение, и если оно покажет 49 градусов, то после 1-часового сеанса оно будет постоянно показывать 49 градусов.Где проблема?

1 Ответ

4 голосов
/ 13 июня 2013

В http://www.scriptinternals.com/new/us/support/Internal/WMI_MSAcpi_ThermalZoneTemperature.htm Я обнаружил, что CurrentTempera возвращает температуру в некоторой тепловой зоне, которая находится где-то на материнской плате.Это означает, что он возвращает не температуру процессора.Это было бы так же, как температура на кухне - 30 ° C, а плита - 200 ° C или около того ... Этот способ не может показать точную температуру процессора.Чтобы получить точную температуру процессора (и каждого ядра), вам нужно написать драйверы ядра, что гораздо сложнее.

В целом ваш код делает то, что должен делать, для измерения температуры вам нужноиспользуйте другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...