如何在C#中获取或使用内存

时间:2009-04-15 06:57:00

标签: c# memory-management

如何获取应用程序使用的可用RAM或内存?

6 个答案:

答案 0 :(得分:158)

您可以使用:

Process proc = Process.GetCurrentProcess();

获取当前流程并使用:

proc.PrivateMemorySize64;

获取私有内存使用情况。有关更多信息,请查看this link

答案 1 :(得分:37)

您可能需要查看GC.GetTotalMemory方法。

它检索当前认为由垃圾收集器分配的字节数。

答案 2 :(得分:23)

System.EnvironmentWorkingSet - 一个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

  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变量,该变量将转换为兆字节。

答案 5 :(得分:0)

对于完整的系统,您可以添加Microsoft.VisualBasic Framework作为参考;

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