获取进程的ram使用情况

Mei*_*ude 20 c#

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

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

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

Laz*_*sen 41

我在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();
Run Code Online (Sandbox Code Playgroud)

  • memsize是以kB而不是MB (6认同)
  • @Dennis - 可能是因为chrome不仅是多线程的,而且是多进程的(多个同名的可执行文件,一次运行).所以它只返回任何一个chrome可执行文件的内存.你可以使用任务管理器仔细检查这个 (3认同)
  • 这是真正的答案 (2认同)
  • @ laz-nikolaj-andersen,请添加指向您的链接参考答案 (2认同)
  • 人们应该意识到,这取决于进程名称,这意味着如果您有一个 exe 的多个实例,那么这可能不会返回正确的值。 (2认同)

Mat*_*hen 19

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

  • 请注意[锁定页面](http://forum.sysinternals.com/topic23886_post122660.html),它们不是工作集的一部分(奇怪的是),[标准任务管理器也看不到它们] (http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx)(即使他们肯定被消费:D) (4认同)