Как получить доступную память или использовать ее в С#

Как получить доступную оперативную память или память, используемую приложением?

Ответ 1

Ты можешь использовать:

Process proc = Process.GetCurrentProcess();

Чтобы получить текущий процесс и использовать:

proc.PrivateMemorySize64;

Чтобы получить частное использование памяти. Для получения дополнительной информации посмотрите эту ссылку.

Ответ 2

Возможно, вы захотите проверить метод GC.GetTotalMemory.

Он извлекает количество байтов, которые в настоящее время считаются выделенными сборщиком мусора.

Ответ 3

System.Environment имеет WorkingSet - 64-разрядное целое число со знаком, содержащее количество байтов физической памяти, сопоставленных с контекстом процесса.

Если вам нужно много подробностей, есть System.Diagnostics.PerformanceCounter, но для его установки потребуется немного больше усилий.

Ответ 4

Подробнее см. здесь.

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(). Затем он дает фактическое значение использования ЦП. Подробнее здесь.

Ответ 6

В дополнение к @JesperFyhrKnudsen ответа и @MathiasLykkegaardLorenzen комментарий, вы бы лучше dispose возвращаемый Process после его использования.

Таким образом, для удаления Process вы можете заключить его в область using или вызвать Dispose для возвращаемого процесса (переменная proc).

  1. 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 1e+6
           memory = proc.PrivateMemorySize64 / 1e+6;
    }
    
  2. Или Dispose метод:

    var memory = 0.0;
    Process proc = Process.GetCurrentProcess();
    memory = Math.Round(proc.PrivateMemorySize64 / 1e+6, 2);
    proc.Dispose();
    

Теперь вы можете использовать переменную memory которая конвертируется в мегабайты.

Ответ 7

Для всей системы вы можете добавить Microsoft.VisualBasic Framework в качестве ссылки;

 Console.WriteLine("You have {0} bytes of RAM",
        new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
        Console.ReadLine();