【问题标题】:How to get application memory usage as shown in Task Manager?如何获取任务管理器中显示的应用程序内存使用情况?
【发布时间】:2015-02-27 12:24:56
【问题描述】:

我正在尝试获取应用程序的内存使用情况,但由于某种原因,我得到的大小与任务管理器中的不同

我正在使用:

任务管理器显示我的应用程序占用 45mb,而当我将其拉入代码时,我得到 85mb 我怎样才能获得与任务管理器中相同的大小(不使用 wmi)

【问题讨论】:

  • 在拨打process.PrivateMemorySize64之前添加process.Refresh()
  • 没有帮助,得到与以前相同的值
  • 如果您遇到这样的事情,我强烈建议您放弃任务管理器并将其替换为 Sysinternals 的 Process Explorer。观看此视频channel9.msdn.com/Shows/Defrag-Tools/…
  • 我使用的是 Windows 7 64 位
  • 我添加了代码截图和发生了什么

标签: c# .net memory process ram


【解决方案1】:

可能你在“任务管理器”中查看错误的列或在 Process 类中使用错误的属性..

我猜你正在寻找 WorkingSet64 而不是 PrivateMemorySize64PrivateMemorySize64 是为进程分配的虚拟内存量,而不是物理内存。对于物理内存使用WorkingSet64

此外,您需要在访问进程类中的任何动态属性之前调用process.Refresh(),因为它被大量缓存。

process.Refresh();
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture);

【讨论】:

  • 我在调试时添加了刷新并上传了代码,因为你看到内存大小不同,内存大小也没有太大变化它非常稳定在45-47mb〜
  • 调试时不要检查进程内存。从调试器中运行该过程并检查。因为在调试时,Visual Studio 将为您运行托管进程 YourProcess.vshost.exe。这可能会导致混乱。我通过在控制台中打印输出(用完视觉工作室)对此进行了测试,并且效果很好。还将 Sleep(200) 更改为 Sleep(1000) 以便它与任务管理器同步。
  • 我正在尝试不使用 Visual Studio 并进行调试,但仍然不对,我在任务管理器中也没有看到 vshost
  • 正如我所说,您仍在查看任务管理器中的错误列。您需要检查“工作集”列。如果您需要私有工作集,请查看this answer
  • WorkingSet64 显示 114mb,PrivateMemorySize64 显示 80-84mb
【解决方案2】:

使用以下代码尝试一次,可能会有所帮助

PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "ServerProcess";
PC.CounterName = "Working Set - Private";
PC.InstanceName = JSP[0].ProcessName; //Process
RAM_memorysize = PC.NextValue();            //float RAM_memorysize;
PC.Close();
PC.Dispose();

【讨论】:

    【解决方案3】:

    以上都不适合我。因此我找到了这个解决方案

    How to get application memory usage as shown in Task Manager?

    Hans Passant 做得很好。

    string prcName = Process.GetCurrentProcess().ProcessName;
    var counter_Exec = new PerformanceCounter("Process", "Working Set - Private", prcName);
    double dWsp_Exec =  (double)counter_Exec.RawValue / 1024.0; <---that is the value in KB
    

    此外,我有时会发现可能与不同更新有关的微小差异 (

    唯一的小缺点是第一条指令需要很长时间 (5") 来累积数据,因此它可能会在线程中处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 2014-08-26
      • 2012-04-03
      • 2011-08-09
      • 2021-04-03
      相关资源
      最近更新 更多