2009-04-15 13 views
104

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

+2

現在、使用されている物理RAMはワーキングセットであり、割り当てられたメモリはプライベートまたは共有バイトになります(割り当ての種類によって異なります)。 – Richard

答えて

129

あなたは使用することができます。

Process proc = Process.GetCurrentProcess(); 

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

proc.PrivateMemorySize64; 

がプライベートメモリ使用量を取得するには。詳細はthis linkをご覧ください。

+31

GetCurrentProcessを呼び出すと、かなり多くのリソースが割り当てられることに注意してください。終了したら、返されたプロセスを破棄するか、コード全体を「使用」スコープにラップします。 –

+4

ネームスペース:System.Diagnostics アセンブリ:System(System.dll内) –

+3

さらに、PrivateMemorySize64プロパティ(+その他のプロパティ)自体がRefresh()が呼び出されるまで自動的に更新されないことを追加したいと思います。 (これは、上記のリンクのページに記載されています) – ScottRhee

29

GC.GetTotalMemoryの方法を確認してください。

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

+7

管理されたヒープでのみ。 Arkainの答えは、ネイティブと管理されたヒープの両方を与える必要があります。 – Yaur

6

詳細を探し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()を2回呼び出す必要があります。次に、CPU使用率の実際の値を示します。詳細はhereを参照してください。あなたが参照としてMicrosoft.VisualBasicフレームワークを追加することができ、完全なシステムのために

0

Console.WriteLine("You have {0} bytes of RAM", 
     new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory); 
     Console.ReadLine(); 
関連する問題