MY-Namespace oder alternative (Cpu/Ram Counter)

  • WPF
  • .NET 5–6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    MY-Namespace oder alternative (Cpu/Ram Counter)

    Hallo ihr lieben,

    ich hatte vor Jahren, unter WinForms mit zurhilfenahme von GDI+ mal einen Performancecounter geschrieben, im Prinzip eine Progressbar pro Thread, mit Auslastung, und natürlich auch mit einer Auslastungsanzeige für den Ram.
    Seit Windows 10 funktionierte das Programm leider nicht mehr, und ich habs halt einfach nicht mehr angefasst, jetzt hatte ich allerdings vor, es einmal komplett neuzuschreiben, dabei gibt es zwar mehrere Probleme, aber das aktuelle hauptproblem ist,
    das der Ram-Teil der Anwendung auf den "MY"-Namespace angewiesen ist, jedoch scheine ich in einer WPF-Anwendung keinen Zugriff mehr auf diesen zu haben. Hat evtl. jemand einen Alternativen Ansatz für den folgenden Code, oder besteht die Möglichkeit den Code auch in der WPF zum laufen zu bekommen ?


    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.Timers
    2. Public Class SystemMemory
    3. Private WithEvents MemTimer As New System.Timers.Timer
    4. Private TotalMBofMemory As ULong
    5. Private AvailableMBofMemory As ULong
    6. Private InUseMBofMemory As ULong
    7. Private InUsePercentofMemory As Double
    8. Private FreePercentofMemory As Double
    9. Public Event Refreshed()
    10. Public Sub New(ByVal Interval As Integer)
    11. MemTimer.Interval = Interval
    12. MemTimer.Enabled = True
    13. End Sub
    14. Private Sub MemTimer_Elapsed(sender As Object, e As ElapsedEventArgs) Handles MemTimer.Elapsed
    15. RefreshMemoryValues()
    16. End Sub
    17. Private Sub RefreshMemoryValues()
    18. TotalMBofMemory = My.Computer.Info.TotalPhysicalMemory
    19. AvailableMBofMemory = My.Computer.Info.AvailablePhysicalMemory
    20. InUseMBofMemory = TotalMBofMemory - AvailableMBofMemory
    21. InUsePercentofMemory = InUseMBofMemory / (TotalMBofMemory / 100)
    22. FreePercentofMemory = GetFreeMemoryInPercent()
    23. RaiseEvent Refreshed()
    24. End Sub
    25. Public Function GetUsageInPercent() As Double
    26. Return InUsePercentofMemory
    27. End Function
    28. Public Function GetFreeMemoryInPercent() As Double
    29. Return 100 - InUsePercentofMemory
    30. End Function
    31. Public Function GetTotalMemoryInMB() As Double
    32. Return FormatBytes(TotalMBofMemory)
    33. End Function
    34. Public Function GetAvailMemoryInMB() As Double
    35. Return FormatBytes(AvailableMBofMemory)
    36. End Function
    37. Public Function GetInUseMemoryInMB() As Double
    38. Return FormatBytes(InUseMBofMemory)
    39. End Function
    40. Private Function FormatBytes(ByVal BytesCaller As ULong) As Double
    41. Return CDbl(BytesCaller / 1048576)
    42. End Function
    43. End Class



    LG und Danke
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Der My-Namespace ist nur ein Sammelsurium von "ShortCuts" (und die sind oft nichtmal short), die iwas im Framework addressieren.
    Also nur eine Verschwurbelung von etwas, was ohne die Verschwurbelung einfacher addressierbar wäre. Beispiele:

    VB.NET-Quellcode

    1. My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
    2. 'ist dasselbe wie:
    3. Media.SystemSounds.Asterisk.Play()
    4. Dim s = My.Computer.FileSystem.CombinePath("ljk", "lkjkj")
    5. 'ist dasselbe wie:
    6. s = System.IO.Path.Combine("ljk", "lkjkj")

    Das dumme ist, der My-Namespace verschleiert, was durch ihn hindurch aufgerufen wird.
    Folglich ist deine Aufgabe, erstmal herauszufinden, was in deinem alten Proggi da eiglich aufgerufen wurde.
    Also wenn du bei deinem alten Proggi alle My-Verwendungen austauschst durch ihre unverschwurbelte Entsprechung hast du damit eine Grundlage geschaffen, die Codes in eine Umgebung zu portieren, die diesen quatsch von vornherein nicht kennt.
    @ErfinderDesRades
    hast du evtl. einen Tipp wie ich das herausfinden könnte ? Google lässt mich ins Messer rennen.

    My.Computer.Info.TotalPhysicalMemory
    My.Computer.Info.AvailablePhysicalMemory

    LG und Danke


    Edit: Nevermind, "ComputerInfo" war das Zauberwort. Danke


    Nachtrag 2: Auch "Microsoft.VisualBasic.Devices.ComputerInfo()" funktioniert in der WPF nicht....... "Der Typ Blablabla ist nicht definiert"
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „asusdk“ ()

    Hi
    Gibt es evtl. in WPF die Klasse System.Diagnostics.PerformanceCounter? Check check, doch gibt es. Damit kommst Du auch an entsprechende Daten. Ist aber evtl. ein wenig aufwendiger und wichtig war glaub ich das für den PerformanceCounter <- CategoryName, CounterNames und InstanceName auf englisch angegeben werden sollten. Auf einem deutschen System gehen auch die deutschen Bezeichnungen die dann intern entsprechend auf die englische Bezeichnung gemappt werden. Deutsche Bezeichnungen funktionieren dann aber nicht auf zb einem russischem System. Deswegen am besten gleich die englischen Bezeichnungen verwenden. Die funktionieren immer.
    Mfg -Franky-
    Ja der NameSpace ist verfügbar, und den werd ich leider auch noch verwenden müssen, für Cpu Auslastung und co. Ich hab jetzt einfach meine SystemMemory Klasse als .Net.dll geschrieben und in der WPF importiert, funktioniert jetzt wie gewünscht
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If