Announcement

Collapse
No announcement yet.

Freier Arbeitsspeicher mit WMI

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Freier Arbeitsspeicher mit WMI

    Hallo zusammen!

    Ich möchte mit WMI den gesammten und der freien Arbeitsspeicher auslesen. Zum erstellen habe ich den WMI Code Creator, der dabei sehr hilfreich ist. Leider gibt es da mehrer Möglichkeiten und ich weiß nicht welche dazu richtig ist. Vorallem, da die Methode in Win32_Operating System einen Wert liefert, der offensichtlich zu hoch ist. Weiß jemand, welche Klasse ich dazu verwenden kann? Vielen Dank für die Hilfe

  • #2
    Hallo,

    es gibt noch andere Möglichkeiten:
    • WMI (wie du bereits weißt)
    • PerformanceCounter
    • P/Invoke (Win-API-Aufruf)
    • ComputerInfo aus VisualBasic.Devices


    wobei letztere Möglichkeit nur eine benutzerfreundliche Implementierung von Möglichkeit 3 darstellt.

    Beispiel:
    [highlight=c#]
    using System;
    using Microsoft.VisualBasic.Devices;
    using System.Diagnostics; // Verweis einbinden!

    namespace RAM
    {
    class Program
    {
    static void Main()
    {
    ComputerInfo computerInfo =
    new Microsoft.VisualBasic.Devices.ComputerInfo();
    ulong availableRAM = computerInfo.AvailablePhysicalMemory;
    ulong totalRAM = computerInfo.TotalPhysicalMemory;

    Console.WriteLine("Verfügbar:\t {0} Bytes \t= {1} MB",
    availableRAM,
    availableRAM / (1024 * 1024));
    Console.WriteLine("Total:\t\t {0} Bytes \t= {1} MB",
    totalRAM,
    totalRAM / (1024 * 1024));
    Console.ReadKey();
    }
    }
    }
    [/highlight]

    mfG Gü
    Zuletzt editiert von gfoidl; 29.09.2008, 21:23.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hm... das ist nicht ganz die Antwort die ich erhofft hatte :-)
      Ich verwende den Code:
      ManagementObjectSearcher searcher = newManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_ComputerSystem");
      foreach (ManagementObject queryObj in searcher.Get())
      {
      string ram = queryObj["TotalPhysicalMemory"].ToString();

      return ram;
      }
      um den gesammten Speicher auszulesen. Als Antwort bekomme ich:
      4293345280
      Da ich aber "nur" 4096MB installiert hab, kann der Wert ja nicht stimmen, oder muß ich dass irgendwie auf MB umrechnen?
      Deswegen dachte ich, ich hab nicht die richtige Methode genommen um den Ram abzurufen.

      Comment


      • #4
        Hi,

        das ist sehr wohl das Ergebnis dass du erhofft hast. Du musst dich nur Informieren mit welcher Einheit die Werte ausgegeben werden. Es sind nämlich nur Zahlen sonder Werte - wobei ich einen Wert als Zahl mit Einheit definiere.

        Die Angabe ist in Byte. => Wert / 1024 / 1024 = MB

        Ergibt dann bei dir 4094,453125 MB und ist plausibel. Einheitencheck und Plausibilitätskontrolle sing immer wichtig!

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          den gesammten und der freien Arbeitsspeicher auslesen
          Mein obiges Beispiel liefert genau die Ergebnisse die in der Frage gestellt wurden - also das was du erwartest.

          Die Ergebnisse von WMI und der Computer-Info Klasse sind - welch eine Überraschung - ident.

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Das ist ja alles ok so, versteh das bitte nicht verkehrt! Du hast aber nicht die WMI verwendet im Beispiel (so wie ich das verstehe). Ich wollte wissen, ob ich die richtige Methode der WMI verwendet hab, oder nicht bzw. ob der Wert umgerechnet werden muss. Das ist aber jetzt auch schon beantwortet. Ich hatte nicht Wert/1024/1024 gerechnet, deswegen hatte ich das falsche Ergebnis, das es Byte sind wusste ich auch...
            Fälschlicher Weise habe ich durch 1024000 geteilt?! :-)

            Comment


            • #7
              Originally posted by brown78 View Post
              das falsche Ergebnis
              Nur um es korrekt darzustellen: Du hattest das richtige Ergebnis, nur nicht in der von dir gewünschten Einheit.
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment

              Working...
              X