Comment puis-je obtenir la RAM disponible ou la mémoire utilisée par l'application?
Comment puis-je obtenir la RAM disponible ou la mémoire utilisée par l'application?
Réponses:
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 .
GetCurrentProcess
, mais n'ont besoin d'être actualisées que si vous effectuez d'autres opérations avant d'accéder aux propriétés. Source - Les remarques indiquent que les propriétés sont correctes au moment de la création de l'instantané de processus.
Vous souhaiterez peut-être vérifier la méthode GC.GetTotalMemory .
Il récupère le nombre d'octets actuellement censés être alloués par le garbage collector.
System.Environment a WorkingSet - un entier signé 64 bits contenant le nombre d'octets de mémoire physique mappés au contexte de processus.
Si vous voulez beaucoup de détails, il y a System.Diagnostics.PerformanceCounter , mais la configuration demandera un peu plus d'efforts.
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 la valeur 0, il doit appeler NextValue()
deux fois. Ensuite, il donne la valeur réelle de l'utilisation du processeur. Voir plus de détails ici .
En plus de @JesperFyhrKnudsen « s de réponse et @MathiasLykkegaardLorenzen » s commentaire, vous feriez mieux de dispose
le retournéProcess
après l' avoir utilisé.
Ainsi, pour supprimer le Process
, vous pouvez l'envelopper dans une using
portée ou appeler Dispose
le processus retourné ( proc
variable).
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 2^20
memory = proc.PrivateMemorySize64 / (1024*1024);
}
Ou Dispose
méthode:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
Vous pouvez maintenant utiliser la memory
variable qui est convertie en mégaoctet.
^
c'est XOR au niveau du bit, pas de puissance. Alors utilisez simplement proc.PrivateMemorySize64 / (1024*1024)
, ouproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
car la multiplication n'a pas de priorité sur la division.
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();
System.Diagnostics.Process
classe.