Lê Ngọc Quý Ответов: 1

[C#] получить текущую тактовую частоту процессора в режиме реального времени


Всем привет!

У меня есть проблема в моих проектах. Надеюсь, кто-нибудь сможет мне помочь! Большое спасибо.
Я хочу получить текущие часы процессора в режиме реального времени (обновление каждую секунду), чтобы построить график.
Я создаю таймер с интервалом 1000 миллисекунд, внутри функции Timer_Tick() я использую этот код, чтобы получить текущую тактовую частоту процессора (ГГц):
foreach (ManagementObject search in win32proc.Get())
                    currclock = Convert.ToDouble(search["CurrentClockSpeed"]) / 1000.0; //Current Clock (GHz) 


Он работает нормально, тактовая частота обновляется 1 раз/сек. Но это заставляет мое приложение казаться "замороженным"; я не могу нажать ни на одну кнопку или закрыть приложение.
Надеюсь, что кто-нибудь может помочь мне решить эту проблему или показать мне другой способ получить текущую тактовую частоту процессора в режиме реального времени.

Все равно спасибо!

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

Решение:
Создайте фоновый рабочий поток, чтобы получить текущую тактовую частоту, он работает независимо с потоком пользовательского интерфейса.
Для всех, кто хочет узнать о фоновом работнике: Потоки BackgroundWorker и поддержка отмены[^]

[no name]

Поскольку Windows не является операционной системой реального времени, лучшее, что вы можете сделать, - это получить эту информацию, когда Windows позволит вам это сделать. Если ваше приложение "замораживается", то используйте фоновый поток.

1 Ответов

Рейтинг:
9

Ron Beyer

Я надеюсь, что у вас есть этот код в блоке try...catch. Вы, вероятно, бросаете много исключений, которые заставляют программу запираться в рутине, пока вы пытаетесь получить недопустимый объект на все, пока вы не получите тот, который работает.

Все, что вам нужно сделать, это найти правильный объект управления и сохранить его, а затем просто получить значение в таймере. Циклический просмотр всех объектов управления и попытка преобразовать их все, вероятно, вызывают проблемы. Исключения стоят дорого, поэтому делайте все возможное, чтобы их избежать.


Lê Ngọc Quý

Большое вам спасибо, Рон Бейер. Я решил эту проблему!

BillWoodruff

+5 хороший твердый ответ, который не заслуживает отрицательного голосования.