C# Größe des RAMs auslesen

Overkee

Lieutenant
Registriert
Okt. 2015
Beiträge
959
Hallo zusammen,

ich versuche schon den halben Tag über C# die Größe des installierten Arbeitsspeicher auszulesen. Ich habe schon diverse Lösungsvorschläge von Stackoverflow, MSDN usw... ausprobiert, aber entweder bin ich zu blöd es anzuwenden oder es funktioniert nicht mehr.

Als letztes habe ich jetzt den WMI Code Generator von Microsoft ausprobiert, der mir dieses Code gab:

Code:
using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_ComputerSystem"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_ComputerSystem instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("TotalPhysicalMemory: {0}", queryObj["TotalPhysicalMemory"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

Führe ich ihn über den WMI Code Generator aus, funktioniert es auch. Füge ich den Code in ein Visual Studio Projekt ein, geht es nicht mehr, da VS nichts mit ManagementObjectSearcher und queryObj anzufangen weiß und rot unterstreicht.

Kann mir jemand weiterhelfen?
Ergänzung ()

Hier noch weitere Code Beispiele die ich erfolglos ausprobiert habe:

Code:
using System;
using System.Management;

namespace MemInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            ObjectQuery winQuery = new ObjectQuery("SELECT * FROM Win32_LogicalMemoryConfiguration");

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(winQuery);

            foreach (ManagementObject item in searcher.Get())
            {
                Console.WriteLine("Total Space = " + item["TotalPageFileSpace"]);
                Console.WriteLine("Total Physical Memory = " + item["TotalPhysicalMemory"]);
                Console.WriteLine("Total Virtual Memory = " + item["TotalVirtualMemory"]);
                Console.WriteLine("Available Virtual Memory = " + item["AvailableVirtualMemory"]);
            }
            Console.Read();
        }
    }
}

Code:
using System;

class Program {
    static void Main(string[] args) {
        Console.WriteLine("You have {0} bytes of RAM",
            new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
        Console.ReadLine();
    }
}
 
charmin schrieb:

Ja, beim googeln habe ich diese Möglichkeit auch schon gesehen, aber verworfen. Es sieht deutlich komplizierter aus als alles andere was ich gesehen habe und überfordert mich etwas.

glpsy schrieb:

Zu Link 1: Sieht interessant aus, aber VS kann bei mir nichts mit
Code:
using Microsoft.VisualBasic.Devices;
anfangen. Das Devices ist unterstrichen und als nicht vorhanden gekennzeichnet. Möglicherweise fehlt ein Assmblyverweis steht da noch. Bei MSDN hatte ich aber auch schon folgendes gefunden: https://msdn.microsoft.com/de-de/library/microsoft.visualbasic.devices.computerinfo(v=vs.110).aspx, was sich mit dem Snippet aus Link 1 deckt.

Zu Link 2: Ja das funktioniert, macht aber nicht das was ich möchte. Hier wird nur der freie RAM und nicht der gesamte RAM angezeigt.

EDIT: Habe den fehlenden Verweis beheben können. Die Lösung aus dem ersten Link funktioniert. Vielen Dank! :D
 
Zuletzt bearbeitet:
Zurück
Oben