gruenesossemitspeck
Goto Top

VBA - CPU Last gesamt ermitteln

Guten Abend,
ich versuche, per VBA die Gesamtlast aller CPUs auf einem Host auszulesen.
Hintergrund ist daß User öfters mal über Hänger oder sonstige Zustände klagen, und ich hab der Applikation über VBA einen Button spendiert, der ein paar grundlegende Fakten einsammelt und in eine Logdatei schreibt.
- Anzahl der Instanzen des PRogrammes
- eine For-Schleife die in ca. 4 Sekunden fertig sein sollte
- eine handvoll applikationsspezifsche Tests
und zuguterletzt wollte ich die vor dem Test schon vorhandene CPU-Last ermitteln.

das was hier angezeigt wird im Windows 11 Taskmanager

cpuload

sollte auch in eine Logdatei kommen... nur liefern die ganzen Skriptbeispiele alles mögliche, nur nicht die Gesamtlast
Ich hab mal mit 7zip eine große Datei eingepackt unter Nutzung aller Threads.... 100% im Taskmanager, aber eher 60 im Skript

ES wird zwar eine Collection geliefert, 12 CPUs und _total aber das stimmt vorne und hinten nicht...
a) _total stimmt nicht
b) die Einzellasten der CPUs summiert und durch die Anzahl geteilt... ebenso nicht.

Kennt jemand eine bessere Lösung?

Quelle

https://www.techrepublic.com/forums/discussions/cpu-utilization-script/

das Original filtert nach "_TOTAL" , ich hab mal nach NOT _TOTAL umgestellt, weil ich mir dachte, daß man vielleicht über die Summe der einzelnen CPU-Infos zur Gesamtlast kommt, stimmt aber nicht.

strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")  
Set objProcessor = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet  
objRefresher.Refresh

cpuload=0

Output ObjProcessor.count

For Each intProcessorUse In objProcessor
If Not intProcessorUse.Name = "_Total" Then  

Output FormatDateTime(Now,vbShortDate) & vbTab & _
FormatDateTime(Now,vbShortTime) & vbTab & _
intProcessorUse.PercentProcessorTime & " " & intProcessorUse.Name  

cpuload=cpuload+intProcessorUse.PercentProcessorTime

End If
Next

Output "Total load estimation " & int(cpuload/objProcessor.count)  
objRefresher.Refresh

Content-ID: 91777971447

Url: https://administrator.de/contentid/91777971447

Ausgedruckt am: 23.11.2024 um 10:11 Uhr

michi1983
michi1983 01.02.2024 um 23:07:27 Uhr
Goto Top
Hallo,

offtopic:
Als Level3 solltest du zumindest Code Tags verwenden können, damit das halbwegs leserlich ist.

Gruß
GNULinux
GNULinux 02.02.2024 um 08:40:00 Uhr
Goto Top
Hi,
das sind dringende Warnzeichen dafür, dass du eine Tabellenkalkulation als völlig falsches Werkzeug Missbrauchst.