Как я могу получить доступную оперативную память или память, используемую приложением?
Как я могу получить доступную оперативную память или память, используемую приложением?
Ответы:
Ты можешь использовать:
Process proc = Process.GetCurrentProcess();
Чтобы получить текущий процесс и использовать:
proc.PrivateMemorySize64;
Чтобы получить частное использование памяти. Для получения дополнительной информации посмотрите эту ссылку .
GetCurrentProcess
, но их нужно обновлять, только если вы выполняете другие операции до доступа к свойствам. Источник - Замечания говорят, что свойства являются правильными в момент создания снимка процесса.
Возможно, вы захотите проверить метод GC.GetTotalMemory .
Он извлекает количество байтов, которые в данный момент считаются выделенными сборщиком мусора.
System.Environment имеет WorkingSet - 64-разрядное целое число со знаком, содержащее количество байтов физической памяти, сопоставленных с контекстом процесса.
Если вам нужно много подробностей, есть System.Diagnostics.PerformanceCounter , но для его установки потребуется немного больше усилий.
Смотрите здесь для деталей.
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);
}
Если вы получите значение 0, его нужно вызвать NextValue()
дважды. Затем он дает фактическое значение использования процессора. Смотрите подробности здесь .
В дополнение к @JesperFyhrKnudsen «s ответ и @MathiasLykkegaardLorenzen » s комментарий, вы бы лучше dispose
возвращенное Process
после его использования.
Итак, чтобы избавиться от Process
, вы можете заключить его в using
область видимости или вызвать Dispose
возвращаемый процесс ( proc
переменную).
using
объем:
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);
}
Или Dispose
метод:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Теперь вы можете использовать memory
переменную, которая конвертируется в мегабайты.
^
это битовый XOR, а не power. Так что просто пользуйтесь proc.PrivateMemorySize64 / (1024*1024)
, илиproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
как умножение не имеет приоритета над делением.
Для полной системы вы можете добавить Microsoft.VisualBasic Framework в качестве ссылки;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
класс.