【问题标题】:Getting details on application RAM usage获取有关应用程序 RAM 使用情况的详细信息
【发布时间】:2013-12-11 11:08:53
【问题描述】:

根据进程资源管理器/任务管理器的说法,我的应用程序有一个大约 190MB 的私有工作集大小,即使在不执行特定任务时也是如此,这比我预期的要多得多。使用 FastMM,我已经验证了这些都不是传统意义上的实际内存泄漏。

我还阅读了相关讨论going on here,其中建议使用FastMM 的LogMemoryManagerStateToFile();。然而,输出生成状态“21299K 已分配,49086K 开销”,总和 (70MB) 远低于任务管理器的建议。

有什么方法可以找出造成巨大差异的原因吗?对于大约 15 个表单的应用程序来说,190MB 甚至可能是一个可预期的值吗?另外,有 70% 的开销是“坏的”,有什么办法可以减少这个数字?

【问题讨论】:

  • 听起来这不是问题。还要记住,FastMM 并不是进程中唯一分配内存的东西。
  • 说得更简单一些,我的应用程序使用了 120MB 的 RAM,FastMM 没有跟踪它,我正在尝试获取更多详细信息以最终减少它。
  • 您有什么顾虑或目标内存占用?
  • 没有特定的目标占用空间,我只是想了解为什么我的应用程序占用了这么多内存,以评估它是否正常或由于坏而使用超过应有的内存设计。

标签: delphi delphi-xe3


【解决方案1】:

您可以使用来自 Sysinternals 的VMMap 来全面了解您的进程正在使用的虚拟内存地址空间。这应该可以让您计算出您在 taks manager 和 FastMM 之间看到的区别。

我怀疑 FastMM 报告甚至可以报告像 Mapped FileShareablePage Table 这样的部分,而这些部分确实占据了 Private WS

【讨论】:

  • 这告诉我,我的私人工作集中有 172MB 的“私人数据”,我不太确定如何使用这些信息来找出实际占用该空间的内容...
  • 当您单击顶部的private data 部分时,您会过滤底部以仅查看该部分。然后底部会告诉您该内存块的地址和大小。至于用途,这些区域例如用来存放TEB(线程环境块)和PEB。您可以尝试使用view -> strings 在此区域中查找字符串,但您在此区域中找到任何字符串的可能性很小。最后,如果您想查看这些地址中存储的内容,请启动调试器并查看内存视图。解释这些字节的实际含义是另一回事。
【解决方案2】:

DDDebug 可以让您深入了解应用中对象的内存分配。您可以实时监控更改。

测试试用版或查看网站上的介绍视频。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多