web-dev-qa-db-fra.com

Comment obtenir de la mémoire disponible ou utilisée en C #

Comment obtenir la RAM disponible ou la mémoire utilisée par l'application? 

118
user34537

Vous pouvez utiliser:

Process proc = Process.GetCurrentProcess();

Pour obtenir le processus actuel et utiliser:

proc.PrivateMemorySize64;

Pour obtenir l'utilisation de la mémoire privée. Pour plus d'informations, consultez ce lien .

155

Vous voudrez peut-être vérifier la méthode GC.GetTotalMemory .

Il récupère le nombre d'octets actuellement attribués par le ramasse-miettes.

35
CMS

System.Environment has WorkingSet . Si vous voulez beaucoup de détails, il y a System.Diagnostics.PerformanceCounter , mais la configuration demandera un peu plus d'effort.

22
Austin

Regardez ici pour plus de détails.

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);

}

Si vous obtenez une valeur égale à 0, vous devez appeler NextValue() deux fois. Ensuite, il donne la valeur réelle de l'utilisation du processeur. Voir plus de détails ici .

8
DevT

En plus du commentaire de @JesperFyhrKnudsen et du commentaire de @MathiasLykkegaardLorenzen , vous feriez mieux de dispose le rendu Process après l'avoir utilisé.

Ainsi, pour disposer de Process, vous pouvez l'envelopper dans une étendue using ou appeler Dispose sur le processus renvoyé (variable proc).

  1. using portée:

    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. Ou méthode Dispose:

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

Vous pouvez maintenant utiliser la variable memory qui est convertie en mégaoctet.

1
Ahmad Payan

Pour le système complet, vous pouvez ajouter le Microsoft.VisualBasic Framework comme référence;

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