Como posso obter a RAM ou memória disponível usada pelo aplicativo?
Como posso obter a RAM ou memória disponível usada pelo aplicativo?
Respostas:
Você pode usar:
Process proc = Process.GetCurrentProcess();
Para obter o processo atual e usar:
proc.PrivateMemorySize64;
Para obter o uso de memória privada. Para mais informações, consulte este link .
GetCurrentProcess
, mas só precisam ser atualizados se você estiver executando outras operações antes de acessar as propriedades. Origem - Comentários dizem que as propriedades estão corretas no momento em que o instantâneo do processo é criado.
Convém verificar o método GC.GetTotalMemory .
Ele recupera o número de bytes atualmente considerados alocados pelo coletor de lixo.
System.Environment possui WorkingSet - um número inteiro assinado de 64 bits que contém o número de bytes de memória física mapeada para o contexto do processo.
Se você deseja muitos detalhes, há System.Diagnostics.PerformanceCounter , mas será um pouco mais difícil de configurar.
Veja aqui detalhes.
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);
}
Se você obtiver o valor 0, precisará chamar NextValue()
duas vezes. Em seguida, fornece o valor real do uso da CPU. Veja mais detalhes aqui .
Além @JesperFyhrKnudsen 'resposta s e @MathiasLykkegaardLorenzen ' comentário s, é melhor dispose
o retornou Process
após usá-lo.
Portanto, para descartar o Process
, você pode agrupá-lo em um using
escopo ou chamar Dispose
o processo retornado ( proc
variável).
using
escopo:
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);
}
Ou Dispose
método:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Agora você pode usar a memory
variável que é convertida em Megabyte.
^
é bit XOR, não energia. Então, basta usar proc.PrivateMemorySize64 / (1024*1024)
, ouproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
porque a multiplicação não tem prioridade sobre a divisão.
Para o sistema completo, você pode adicionar o Microsoft.VisualBasic Framework como referência;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
classe.