如何获得应用程序可用的RAM内存或已使用的内存?
你可以使用:
Process proc = Process.GetCurrentProcess();
获取当前进程并使用:
proc.PrivateMemorySize64;
为了获取私有内存使用情况,请参考此链接。GetCurrentProcess
时是“最新的”,但只有在访问属性之前进行其他操作时才需要刷新。来源 - 备注中说,属性在创建进程快照的时候是正确的。 - tabjsina你可能需要检查GC.GetTotalMemory方法。
该方法检索垃圾收集器当前认为已分配的字节数。
System.Environment 包含 WorkingSet 属性,该属性是一个64位有符号整数,包含映射到进程上下文的物理内存字节数。
在 .NET Core 3.0 及更高版本(即 .NET 5 及更高版本)中,您可以使用 GC.GetGCMemoryInfo
来获取有关 GC 堆使用的内存和 GC 认为可用的内存量的信息。 .NET 内部使用此数据来计算内存压力。内存压力用于决定何时修剪 System.Buffers.ArrayPool。
dispose
返回的Process
。
所以,为了处理Process
,你可以将其包装在using
范围内,或者在返回的进程(proc
变量)上调用Dispose
。
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 2^20
memory = proc.PrivateMemorySize64 / (1024*1024);
}
或者 Dispose
方法:
var memory = 0.0;
Process proc = Process.GetCurrentProcess();
memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
proc.Dispose();
现在您可以使用已转换为兆字节的“memory”变量。proc.PrivateMemorySize64 / (1024 * 1024)
,因为乘法没有比除法优先级高。 - Laurynas Lazauskas详情请点击此处。
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使用情况的实际值。更多细节请参见这里。对于完整的系统,您可以将Microsoft.VisualBasic框架添加为引用;
Console.WriteLine("You have {0} bytes of RAM",
new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
Console.ReadLine();
System.Diagnostics.Process
类。 - Ronald Wildenberg