web-dev-qa-db-ja.com

C#でメモリを使用可能または使用する方法

アプリケーションで使用可能なRAMまたはメモリを取得するにはどうすればよいですか?

123
user34537

次を使用できます。

Process proc = Process.GetCurrentProcess();

現在のプロセスを取得して使用するには:

proc.PrivateMemorySize64;

プライベートメモリの使用量を取得します。詳細については、 このリンク をご覧ください。

160

GC.GetTotalMemory メソッドを確認することもできます。

現在ガベージコレクターによって割り当てられていると考えられるバイト数を取得します。

37
CMS

System.Environment has WorkingSet -プロセスコンテキストにマッピングされた物理メモリのバイト数を含む64ビット符号付き整数。

多くの詳細が必要な場合は System.Diagnostics.PerformanceCounter がありますが、セットアップにはもう少し手間がかかります。

23
Austin

詳細については、 こちら をご覧ください。

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()を2回呼び出す必要があります。次に、CPU使用率の実際の値を示します。詳細を参照してください こちら

9
DevT

@ 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変数を使用できます。

2
Ahmad Payan

完全なシステムでは、Microsoft.VisualBasic Frameworkを参照として追加できます。

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