Як я можу отримати доступну оперативну пам’ять або пам'ять, яку використовує додаток?
Як я можу отримати доступну оперативну пам’ять або пам'ять, яку використовує додаток?
Відповіді:
Ви можете використовувати:
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, а не потужність. Тому просто використовуйте 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
клас.