¿Cómo puedo obtener la RAM o memoria disponible utilizada por la aplicación?
¿Cómo puedo obtener la RAM o memoria disponible utilizada por la aplicación?
Respuestas:
Puedes usar:
Process proc = Process.GetCurrentProcess();
Para obtener el proceso actual y usar:
proc.PrivateMemorySize64;
Para obtener el uso de memoria privada. Para más información mira este enlace .
GetCurrentProcess
, pero solo necesitas actualizarlos si estás haciendo otras operaciones antes de acceder a las propiedades. Fuente : las observaciones dicen que las propiedades son correctas en el momento en que se crea la instantánea del proceso.
Es posible que desee comprobar el GC.GetTotalMemory método .
Recupera el número de bytes que el recolector de basura cree actualmente asignados.
System.Environment tiene WorkingSet : un entero con signo de 64 bits que contiene la cantidad de bytes de memoria física asignada al contexto del proceso.
Si desea muchos detalles, hay System.Diagnostics.PerformanceCounter , pero será un poco más difícil de configurar.
Mira aquí para más detalles.
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);
}
Si obtiene el valor 0, debe llamar NextValue()
dos veces. Luego da el valor real del uso de la CPU. Ver más detalles aquí .
Además de @JesperFyhrKnudsen 's respuesta y @MathiasLykkegaardLorenzen comentario' s, es mejor que dispose
los RetornadosProcess
después de usarlo.
Entonces, para deshacerse de él Process
, puede envolverlo en un using
ámbito o invocar Dispose
el proceso devuelto ( proc
variable).
using
alcance:
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);
}
O Dispose
método:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Ahora podría usar la memory
variable que se convierte a Megabyte.
^
es XOR bit a bit, no potencia. Así que solo use proc.PrivateMemorySize64 / (1024*1024)
, oproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
como la multiplicación no tiene prioridad sobre la división.
Para el sistema completo, puede agregar Microsoft.VisualBasic Framework como referencia;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
clase.