【问题标题】:How to get/calculate total memory used by process in .net?如何获取/计算.net中进程使用的总内存?
【发布时间】:2011-12-18 12:52:44
【问题描述】:

我想计算 .net 中某个进程使用的总内存。这里的总内存包括页面文件和 RAM 使用量。我发现最接近的是 Process 类中的 VirtualMemorySize64,但它总是比第三方内存诊断软件显示的总内存使用量低一点。

【问题讨论】:

  • VirtualMemorySize64 应该是正确使用的属性,我很惊讶它比预期的要小。你在说什么其他工具/计数器?
  • 我使用 VMMap,它总是显示总内存大于我从 VirtualMemorySize64 获得的内存。
  • 有趣 - 我不确定。我最好的猜测是 VMMap 正在计算额外的“内存”(如“不可用”内存),但我看不出是什么。
  • 感谢您的猜测。我想你是正确的。我最终使用了 System.Diagnostics.Process.VirtualMemorySize64。

标签: .net memory


【解决方案1】:

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

为了计算页面文件使用PagedMemorySize64。 "该属性返回的值表示进程使用的虚拟内存分页文件中的当前内存大小。操作系统使用虚拟内存分页文件和物理内存共同管理每个进程的虚拟地址空间。"

【讨论】:

  • 这里只包括进程使用的物理内存,不包括pagefile useage。
  • 抱歉,我刚刚编辑了我的答案以包含有关页面文件使用情况的信息
【解决方案2】:

谢谢贾斯汀。我最终使用了System.Diagnostics.Process.VirtualMemorySize64

【讨论】:

    【解决方案3】:

    “我的进程使用的总内存”的定义是未定义的,因为有许多不同种类的内存,它们意味着不同的东西,并且您需要回答很多问题才能准确定义它。以下是其中一些:

    1. 您是同时包含代码和数据,还是仅包含数据?
    2. 如果此代码当前与其他进程共享(例如,两者都使用的公共 DLL)会怎样。
    3. 您是仅包括已提交的内存,还是所有已分配的内存?
    4. 您的进程可以将内存分配为“共享”,但它目前不与任何人共享。所以它不会出现在任何工作集中,但它实际上只被您的进程使用。

    有一个很好的两部分讲座可以回答你的问题。但是您需要花费 2 小时的时间来观看它:)。 Part 1Part 2

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2018-07-15
      • 1970-01-01
      • 2023-03-27
      • 2012-08-28
      • 2011-03-31
      相关资源
      最近更新 更多