Wie kann ich den verfügbaren RAM oder Speicher erhalten, der von der Anwendung verwendet wird?
Wie kann ich den verfügbaren RAM oder Speicher erhalten, der von der Anwendung verwendet wird?
Antworten:
Sie können verwenden:
Process proc = Process.GetCurrentProcess();
So erhalten Sie den aktuellen Prozess und verwenden:
proc.PrivateMemorySize64;
Um die private Speichernutzung zu erhalten. Weitere Informationen finden Sie unter diesem Link .
GetCurrentProcess
, aber nur aktualisiert werden müssen, wenn Sie vor dem Zugriff auf die Eigenschaften andere Vorgänge ausführen. Quelle - Anmerkungen besagen, dass die Eigenschaften zum Zeitpunkt der Erstellung des Prozess-Snapshots korrekt sind.
Möglicherweise möchten Sie die GC.GetTotalMemory- Methode überprüfen .
Es ruft die Anzahl der Bytes ab, von denen derzeit angenommen wird, dass sie vom Garbage Collector zugewiesen werden.
System.Environment verfügt über WorkingSet - eine 64-Bit-Ganzzahl mit Vorzeichen, die die Anzahl der Bytes des physischen Speichers enthält, die dem Prozesskontext zugeordnet sind.
Wenn Sie viele Details wünschen, gibt es System.Diagnostics.PerformanceCounter , aber die Einrichtung ist etwas aufwändiger.
Schauen Sie hier für Details.
private PerformanceCounter cpuCounter;
private PerformanceCounter ramCounter;
public Form1()
{
InitializeComponent();
InitialiseCPUCounter();
InitializeRAMCounter();
updateTimer.Start();
}
private void updateTimer_Tick(object sender, EventArgs e)
{
this.textBox1.Text = "CPU Usage: " +
Convert.ToInt32(cpuCounter.NextValue()).ToString() +
"%";
this.textBox2.Text = Convert.ToInt32(ramCounter.NextValue()).ToString()+"Mb";
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void InitialiseCPUCounter()
{
cpuCounter = new PerformanceCounter(
"Processor",
"% Processor Time",
"_Total",
true
);
}
private void InitializeRAMCounter()
{
ramCounter = new PerformanceCounter("Memory", "Available MBytes", true);
}
Wenn Sie den Wert 0 erhalten, müssen Sie NextValue()
zweimal aufrufen . Dann gibt es den tatsächlichen Wert der CPU-Auslastung an. Weitere Details finden Sie hier .
Neben @JesperFyhrKnudsen ‚s Antwort und @MathiasLykkegaardLorenzen ‘ s Kommentar, sollten Sie besser dispose
die zurück Process
nach Gebrauch.
Um das zu entsorgen Process
, können Sie es in einen Bereich using
einschließen oder Dispose
den zurückgegebenen Prozess ( proc
Variable) aufrufen .
using
Umfang:
var memory = 0.0;
using (Process proc = Process.GetCurrentProcess())
{
// The proc.PrivateMemorySize64 will returns the private memory usage in byte.
// Would like to Convert it to Megabyte? divide it by 2^20
memory = proc.PrivateMemorySize64 / (1024*1024);
}
Oder Dispose
Methode:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Jetzt können Sie die memory
Variable verwenden, die in Megabyte konvertiert wird.
^
ist bitweises XOR, keine Leistung. Also einfach benutzen proc.PrivateMemorySize64 / (1024*1024)
, oderproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
da die Multiplikation keine Priorität vor der Division hat.
Für das gesamte System können Sie das Microsoft.VisualBasic Framework als Referenz hinzufügen.
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
Klasse ansehen .