Mit C # möchte ich die Gesamtmenge an RAM abrufen, über die mein Computer verfügt. Mit dem PerformanceCounter kann ich die Menge des verfügbaren RAM erhalten, indem ich Folgendes einstelle:
counter.CategoryName = "Memory";
counter.Countername = "Available MBytes";
Aber ich kann anscheinend keinen Weg finden, um die gesamte Speichermenge zu erhalten. Wie würde ich das machen?
Aktualisieren:
MagicKat: Ich habe das gesehen, als ich gesucht habe, aber es funktioniert nicht - "Fehlt Ihnen eine Baugruppe oder Referenz?". Ich habe versucht, das zu den Referenzen hinzuzufügen, aber ich sehe es dort nicht.
quelle
this.dwLength = (uint)Marshal.SizeOf(this);
und es funktioniert genauso (ich hatte Probleme mit der Verwendung von NativeMethods, daher funktioniert dieses Update jetzt).Fügen Sie einen Verweis auf
Microsoft.VisualBasic
und a hinzuusing Microsoft.VisualBasic.Devices;
.Die
ComputerInfo
Klasse verfügt über alle Informationen, die Sie benötigen.quelle
Fügen Sie einen Verweis auf Microsoft.VisualBasic.dll hinzu, wie oben erwähnt. Dann ist es so einfach, den gesamten physischen Speicher zu erhalten (ja, ich habe ihn getestet):
quelle
Alle Antworten hier, einschließlich der akzeptierten, geben Ihnen die Gesamtmenge an RAM, die zur Verwendung verfügbar ist . Und das war vielleicht das, was OP wollte.
Wenn Sie jedoch an der Menge des installierten Arbeitsspeichers interessiert sind , sollten Sie die Funktion GetPhysicallyInstalledSystemMemory aufrufen .
Über den Link im Abschnitt "Bemerkungen":
Beispielcode:
quelle
Wenn Sie Mono verwenden, könnte es Sie interessieren, dass Mono 2.8 (das später in diesem Jahr veröffentlicht wird) über einen Leistungsindikator verfügt, der die physische Speichergröße auf allen Plattformen angibt, auf denen Mono ausgeführt wird (einschließlich Windows). Sie würden den Wert des Zählers mit diesem Codeausschnitt abrufen:
Wenn Sie an C-Code interessiert sind, der den Leistungsindikator bereitstellt, finden Sie ihn hier .
quelle
Eine andere Möglichkeit hierfür ist die Verwendung der .NET System.Management-Abfragefunktionen:
quelle
Microsoft.VisualBasic.Devices
. Und alsvar Capacity = new ManagementObjectSearcher("SELECT Capacity FROM Win32_PhysicalMemory").Get().Cast<ManagementObject>().Sum(x => Convert.ToInt64(x.Properties["Capacity"].Value));
Für diejenigen, die verwenden,
.net Core 3.0
ist es nicht erforderlich, diePInvoke
Plattform zu verwenden, um den verfügbaren physischen Speicher zu erhalten. DieGC
Klasse hat eine neue Methode hinzugefügtGC.GetGCMemoryInfo
, die einGCMemoryInfo Struct
withTotalAvailableMemoryBytes
als Eigenschaft zurückgibt . Diese Eigenschaft gibt den insgesamt verfügbaren Speicher für den Garbage Collector zurück (gleicher Wert wie MEMORYSTATUSEX).quelle
Sie können diesen Code einfach verwenden, um diese Informationen zu erhalten. Fügen Sie einfach die Referenz hinzu
und verwenden Sie einfach den folgenden Code
quelle
quelle
Sie könnten WMI verwenden. Ich habe einen Ausschnitt gefunden.
quelle
Set
für VB.NET nicht mehr benötigt wird. Ist dies VB6-Code?Diese Funktion (
ManagementQuery
) funktioniert unter Windows XP und höher:Verwendung:
quelle
BytesToMb
Funktion?Kompatibel mit .Net und Mono (getestet mit Win10 / FreeBSD / CentOS)
Verwenden von
ComputerInfo
Quellcode undPerformanceCounter
s für Mono und als Backup für .Net:quelle
Bisher hat noch niemand GetPerformanceInfo erwähnt . PInvoke-Signaturen sind verfügbar.
Diese Funktion stellt folgende systemweite Informationen zur Verfügung:
PhysicalTotal
ist das, wonach das OP sucht, obwohl der Wert die Anzahl der Seiten ist. Um in Bytes umzuwandeln, multiplizieren Sie mit dem zurückgegebenenPageSize
Wert.quelle
.NIT hat eine Begrenzung für die Speichermenge, auf die insgesamt zugegriffen werden kann. Es gibt einen Prozentsatz und dann 2 GB in XP war die harte Decke.
Sie könnten 4 GB enthalten, und es würde die App töten, wenn es 2 GB erreicht.
Auch im 64-Bit-Modus gibt es einen Prozentsatz des Speichers, den Sie außerhalb des Systems verwenden können. Daher bin ich mir nicht sicher, ob Sie nach dem Ganzen fragen können oder ob dies speziell geschützt ist.
quelle
quelle