Jak mogę uzyskać dostępną pamięć RAM lub pamięć używaną przez aplikację?
Jak mogę uzyskać dostępną pamięć RAM lub pamięć używaną przez aplikację?
Odpowiedzi:
Możesz użyć:
Process proc = Process.GetCurrentProcess();
Aby uzyskać bieżący proces i użyć:
proc.PrivateMemorySize64;
Aby uzyskać prywatne wykorzystanie pamięci. Więcej informacji znajdziesz pod tym linkiem .
GetCurrentProcess
, ale muszą zostać odświeżone tylko wtedy, gdy wykonujesz inne operacje przed uzyskaniem dostępu do właściwości. Źródło - uwagi mówią, że właściwości są poprawne w momencie tworzenia migawki procesu.
Możesz chcieć sprawdzić metodę GC.GetTotalMemory .
Pobiera liczbę bajtów, które są obecnie uważane za przydzielone przez moduł odśmiecania pamięci.
System.Environment ma WorkingSet - 64-bitową liczbę całkowitą ze znakiem zawierającą liczbę bajtów pamięci fizycznej odwzorowanej na kontekst procesu.
Jeśli chcesz uzyskać dużo szczegółów, możesz skorzystać z opcji System.Diagnostics.PerformanceCounter , ale konfiguracja będzie wymagała nieco więcej wysiłku.
Zajrzyj tutaj po szczegóły.
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);
}
Jeśli otrzymasz wartość równą 0, musisz zadzwonić NextValue()
dwa razy. Następnie podaje rzeczywistą wartość użycia procesora. Zobacz więcej szczegółów tutaj .
Oprócz @JesperFyhrKnudsen „s odpowiedź i @MathiasLykkegaardLorenzen ” komentarzu s, lepiej dispose
zwrócony Process
po użyciu go.
Tak więc, aby pozbyć się Process
, możesz umieścić go w using
zakresie lub wywołać Dispose
zwrócony proces ( proc
zmienną).
using
zakres:
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);
}
Lub Dispose
metoda:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Teraz możesz użyć memory
zmiennej, która jest konwertowana na megabajt.
^
jest bitowe XOR, a nie potęga. Więc po prostu użyj proc.PrivateMemorySize64 / (1024*1024)
lubproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
ponieważ mnożenie nie ma pierwszeństwa przed dzieleniem.
Aby uzyskać kompletny system, możesz dodać Microsoft.VisualBasic Framework jako odniesienie;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
klasę.