CPU Auslastung für Unterschiedliche Kerne rausfinden

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von DJ Re-DarK.

    CPU Auslastung für Unterschiedliche Kerne rausfinden

    Hallöle,

    ich hab mir ausm Netz 2 Codes besorgt um die Aktuelle CPU Auslastung auszulesen (1x Per WMI, 1x per Performance-Counter):

    VB.NET-Quellcode

    1. Function GetCPULoad() As Long
    2. '// -----------------------------------------------------
    3. '// Methode: | Mithilfe des WMI die aktuelle CPU-
    4. '// | auslastung in Prozent ermitteln
    5. '// -----------------------------------------------------
    6. '// Parameter: | -
    7. '// -----------------------------------------------------
    8. '// Rückgabe: | Ermittelte CPU-Auslastung
    9. '// -----------------------------------------------------
    10. '// Autor: | Stefan Kulpa
    11. '// | EDV Innovation & Consulting - Dormagen
    12. '// -----------------------------------------------------
    13. On Error GoTo Err_GetCPULoad
    14. Dim objCPUSet As Object
    15. Dim objCPUItem As Object
    16. Dim lPercent As Long
    17. GetCPULoad = -1
    18. objCPUSet = _
    19. GetObject("winmgmts:").InstancesOf("Win32_Processor")
    20. For Each objCPUItem In objCPUSet
    21. If objCPUSet.Count > 1 Then
    22. lPercent = _
    23. lPercent + objCPUItem.LoadPercentage
    24. Else : lPercent = objCPUItem.LoadPercentage
    25. End If
    26. Next
    27. If objCPUSet.Count > 1 Then _
    28. lPercent = _
    29. lPercent \ objCPUSet.Count
    30. GetCPULoad = lPercent
    31. Exit_GetCPULoad:
    32. On Error Resume Next
    33. objCPUSet = Nothing
    34. objCPUItem = Nothing
    35. Exit Function
    36. Err_GetCPULoad:
    37. 'MsgBox("Error reading CPU Usage!" & vbCrLf & _
    38. ' Err.Number & ": " & _
    39. ' Err.Description, vbExclamation)
    40. GoTo Exit_GetCPULoad
    41. End Function


    Die WMI Methode


    VB.NET-Quellcode

    1. 'Beispiel: VB .Net - PerformanceCounter - CPU Auslastung ermitteln - 2
    2. '
    3. Option Explicit On
    4. Option Strict On
    5. Public Class Form1
    6. Private [PerformanceCounter] As New PerformanceCounter
    7. Private utilization As Byte
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    9. Handles MyBase.Load
    10. With Me.Timer1
    11. .Interval = 1000
    12. .Enabled = True
    13. End With
    14. Call Me.InitPerformanceCounter("Processor", "% Processor Time", "_Total")
    15. End Sub
    16. Private Sub InitPerformanceCounter(ByVal CategoryName As String, _
    17. ByVal CounterName As String, _
    18. ByVal InstanceName As String)
    19. With [PerformanceCounter]
    20. .CategoryName = CategoryName
    21. .CounterName = CounterName
    22. .InstanceName = InstanceName
    23. End With
    24. End Sub
    25. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    26. Handles Timer1.Tick
    27. Me.utilization = CByte(([PerformanceCounter].NextValue()))
    28. Me.Label1.Text = CStr(Me.utilization) & "%"
    29. End Sub
    30. End Class


    Die Performance.Counter Methode


    So, funzen beide astrein, aber:

    Ich habe einen Quadcore, heist die Zeigen die Gesamtauslastung an. Ich brauche nun aber für Jeden kern einzelnd einen Wert.

    Weis jemand wie das Geht?

    MfG
    Hi.

    Ich habe auch mal ein bisschen gestöbert und einen abgewandelten PerformanceCounter-Code gefunden:
    dotnet-snippets.de/dns/vbnet-c…s-ueberwachen-SID371.aspx

    Damit können mehrere CPUs überwacht werden - ich denke damit sind die verschiedenen Kerne gemeint. Das wird dadurch ersichtlich, dass an die Initialisierungsroutine nicht "_Total", sondern ein UShort-Wert übergeben wird.
    Gruß
    hal2000
    alles in den Bordmitteln vorhanden

    Zieh einen Perfomance Counter auf deine Form
    geh in den einstellungen
    -> CategoryName = Prozessor
    -> CounterName = Prozessor(%)
    -> InstanceName = _Total oder 0 oder 1 oder ........ ' Das sind dann die Kerne

    nun brauchst du nur noch die werte in empfang nehmen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. ProgressBar1.Value = CInt(PerformanceCounter1.NextValue)
    3. Label4.Text = ProgressBar1.Value.ToString & " %"


    bastel mal damit rum. dort sind viele tolle sachen drin
    Heist dann würde auch mein Code gehen, müsste dann nur mit InstanceName halt den Core angeben... ich teste es gleich mal

    //Edit: Jo, funzt optimal mit meinem Code ;)

    Danke =)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DJ Re-DarK“ ()