【问题标题】:Getting a process's ram usage获取进程的内存使用情况
【发布时间】:2010-10-24 23:06:31
【问题描述】:

我在弄清楚如何准确获取进程的内存使用情况时遇到了一些麻烦。 (它当前消耗了多少内存,而不是保留了多少,或者它的最大值或最小值)

假设我有一个进程在后台运行,Java.exe,它允许使用 1024mb 的内存,我如何知道它当前使用了多少内存。

我自己开始这个过程,所以我可以访问 Process 对象,我想进一步澄清一下什么属性是适合我的。

【问题讨论】:

标签: c#


【解决方案1】:

我在 msdn 上找到了这个,它正在工作

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

int memsize = 0; // memsize in KB
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();

【讨论】:

  • 这才是真正的答案
  • 我认为您不需要转换整数吗?
  • @Dennis - 可能是因为 chrome 不仅是多线程的,而且是多进程的(多个同名的可执行文件,一次运行)。所以它只返回任何一个 chrome 可执行文件的内存。您可以使用任务管理器仔细检查这一点
  • 那个 memsize 的单位是 kB 而不是 MB
  • @laz-nikolaj-andersen 请为您的回答添加链接参考
【解决方案2】:

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

【讨论】:

  • 注意locked pages,它们不是工作集的一部分(奇怪的是)和standard task manager doesn't see them either(尽管它们肯定被消耗了:D)
  • 我想用PeakWorkingSet64来获取进程使用的最大内存,但是不知道什么时候获取这个属性才能给出最准确的值。我认为获得该属性的最佳时机是当进程为“OnExitting”时,但 Process 类没有此事件。它只是有退出事件
【解决方案3】:

太好了,我希望它与任务管理器中描述的一样,并尝试了:

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

并且这些都不起作用,但性能计数器可以!

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();

非常感谢!

【讨论】:

  • 在收到Process.PrivateMemorySize64 之前,您是否致电Process.Refresh()
【解决方案4】:

Win32 GetSystemInfo function 也可以。

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

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2012-02-11
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多