Наблюдение за параметром в WMI

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Наблюдение за параметром в WMI

Сообщение Alprog » 20.07.2008 (Вс) 16:55

Пытаюсь сделать небольшой мониторинг системы.
Но метод ExecQuery работает медленно и если его
часто вызывать, то остальные процессы в программе тормозятся.

Пишу так:

Код: Выделить всё
Sub MonitorTerm()
    Set objWMIService = GetObject("winmgmts:\\.\root\WMI")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM MSAcpi_ThermalZoneTemperature", , 48)
    For Each objItem In colItems
        MaxTerm = Int(objItem.CriticalTripPoint / 10 - 273)
        CurTerm = Int(objItem.CurrentTemperature / 10 - 273)
        Exit For
    Next
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
End Sub

Sub MonitorMemory()
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", , 48)
    For Each objItem In colItems
        CurMem = MaxMem - objItem.FreePhysicalMemory / 1024
    Next
    CurM = CurMem & " MB"
End Sub

Sub MonitorCPU()
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor", , 48)
    For Each objItem In colItems
        CPU = objItem.PercentProcessorTime
    Next
End Sub


Но, возможно, есть способ единожды вызвать метод, чтобы каким-то образом связать переменную с нужным значением?
Ведь события WMI не нужно каждый раз опрашивать, достаточно подписаться на счётчик. Да и мануалы в сети говорят, что нечто вроде счётчика было на 9x/Me для загрузки процессора через реестр.
Значит что-то подобное должно быть и в WMI.

Вот только что?

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 20.07.2008 (Вс) 17:26

Не знаю по поводу счетчика, но могу сказать, что не обязательно делать "SELECT *" - выбирай только необходимые значения... Например

Код: Выделить всё
SELECT CriticalTripPoint, CurrentTemperature FROM MSAcpi_ThermalZoneTemperature
. Получишь прибавку в производительности.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 20.07.2008 (Вс) 17:55

Williams
А что, логично. Спасибо, попробую.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList  
cron