获取进程的ram使用情况

时间:2009-05-09 03:15:11

标签: c#

我一直在弄清楚我是如何获得进程的ram用法的。 (它目前消耗多少ram,而不是预留多少,或者最大或最小)

假设我在后台运行了一个进程,Java.exe,允许使用1024mb的ram,我怎么知道它目前使用了多少ram。

我自己开始这个过程,所以我可以访问Process对象,我只想更清楚一下我的属性是什么。

4 个答案:

答案 0 :(得分:38)

我在msdn上发现了这个并且它正在运行

System.Diagnostics.Process proc = assign your process here :-)

int memsize = 0; // memsize in Megabyte
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = proc.ProcessName;
memsize = Convert.ToInt32(PC.NextValue()) / (int)(1024);
PC.Close();
PC.Dispose();

答案 1 :(得分:18)

如果你纯粹对物理内存感兴趣,你可能需要WorkingSet64,它给出了“为相关进程分配的物理内存量”。了解此值不断波动,此调用给您的值可能不是最新的。您可能还对PeakWorkingSet64感兴趣,它提供了“关联进程使用的最大物理内存量。”

答案 2 :(得分:0)

Win32 GetSystemInfo function也可以。

在此Memory.dll项目中,此过程实际上在实践中成功地用于字节数组扫描: https://github.com/erfg12/memory.dll/blob/042db0cf75e4152a7adf1ea47e6f23f1ad763fb6/Memory/memory.cs#L1909

答案 3 :(得分:-1)

太棒了,我希望这与任务管理器中描述的相同,并尝试:

Process.PrivateMemorySize64
Process.PeakVirtualMemorySize64
Process.PeakPagedMemorySize
Process.PagedSystemMemorySize64
Process.PagedMemorySize64
Process.NonpagedSystemMemorySize64
Process.WorkingSet64

都不起作用,但是 Performance Counter 可以!

PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = "processNameHere";
memsize = Convert.ToInt32(PC.NextValue()) / (int)(1024);
PC.Close();
PC.Dispose();

非常感谢!