Как получить доступ к памяти или использовать в C # - PullRequest
123 голосов
/ 15 апреля 2009

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

Ответы [ 6 ]

158 голосов
/ 15 апреля 2009

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

Process proc = Process.GetCurrentProcess();

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

proc.PrivateMemorySize64;

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

37 голосов
/ 15 апреля 2009

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

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

23 голосов
/ 15 апреля 2009

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

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

8 голосов
/ 21 июня 2012

Смотрите здесь для деталей.

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

2 голосов
/ 26 октября 2018

Помимо @ 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, которая конвертируется в мегабайты.

0 голосов
/ 04 мая 2017

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

 Console.WriteLine("You have {0} bytes of RAM",
        new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
        Console.ReadLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...