如何获取应用程序使用的可用RAM或内存?
答案 0 :(得分:158)
您可以使用:
Process proc = Process.GetCurrentProcess();
获取当前流程并使用:
proc.PrivateMemorySize64;
获取私有内存使用情况。有关更多信息,请查看this link。
答案 1 :(得分:37)
您可能需要查看GC.GetTotalMemory方法。
它检索当前认为由垃圾收集器分配的字节数。
答案 2 :(得分:23)
System.Environment有WorkingSet - 一个64位有符号整数,包含映射到进程上下文的物理内存的字节数。
如果您需要大量详细信息,请System.Diagnostics.PerformanceCounter,但设置时需要付出更多努力。
答案 3 :(得分:8)
查看here了解详情。
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()
两次。然后它给出了CPU使用率的实际值。查看更多详情here。
答案 4 :(得分:2)
除了@JesperFyhrKnudsen的答案和@MathiasLykkegaardLorenzen的评论外,您最好在使用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 1e+6
memory = proc.PrivateMemorySize64 / 1e+6;
}
或Dispose
方法:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / 1e+6, 2);
proc.Dispose();
现在,您可以使用memory
变量,该变量将转换为兆字节。
答案 5 :(得分:0)
对于完整的系统,您可以添加Microsoft.VisualBasic Framework作为参考;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();