delphi - 如何分析Delphi应用程序中过多的内存消耗(PageFileUsage)?

标签 delphi memory-management delphi-xe out-of-memory

这是此问题的后续内容:What could explain the difference in memory usage reported by FastMM or GetProcessMemoryInfo?

我的 Delphi XE 应用程序使用大量内存,有时会导致内存不足异常。我试图了解导致此内存使用的原因和原因,虽然 FastMM 报告内存使用率较低,但在请求 TProcessMemoryCounters.PageFileUsage 时,我可以清楚地看到应用程序使用了大量内存。

我想了解导致此问题的原因,并希望获得一些有关如何处理该问题的建议:

  • 有没有办法知道该内存中包含什么以及它被分配到哪里?
  • 是否有一些工具可以在 Delphi 应用程序中按行/过程跟踪内存使用情况?
  • 关于如何处理此类问题有什么一般建议吗?

编辑1:这是FastMMUsageTracker的两个屏幕截图,表明系统已分配内存。

  • 流程开始前:

Before process starts

  • 流程结束后:

After process ends

图例:浅红色是FastMM分配的,深灰色是系统分配的。

我想了解是什么导致系统使用这么多内存。可能是通过了解该内存中包含的内容或者哪一行代码或过程导致了该分配。

编辑 2:出于多种原因,我不想使用 AQTime 的完整版本:

  • 我使用多个虚拟机进行开发,其许可系统是 PITA(我已经是 TestComplete 的注册用户)
  • LITE 版本无法提供足够的信息,如果没有确定完整版能够为我提供有值(value)的信息,我不会浪费金钱

还有其他建议吗?

最佳答案

另一个问题可能是堆碎片。这意味着您有足够的可用内存,但所有可用 block 都太小。您可以使用 FastMM 的源版本直观地看到它并按照建议使用 FastMMUsageTracker.pas here .

关于delphi - 如何分析Delphi应用程序中过多的内存消耗(PageFileUsage)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720943/

相关文章:

Delphi 自动 Format Source 破坏匿名程序

delphi - 如何在Delphi应用程序中使用项目版本信息?

delphi - Delphi有 'joystick'控件吗?

delphi - FMX进度条颜色

delphi - 使用 Indy 向 Gmail 地址发送电子邮件会被视为垃圾邮件

c - 使用 mingw32 对 posix_memalign 的 undefined reference

c++ - 内存释放

iphone - Objective C 中释放内存的最佳方法是什么?

delphi - 如何添加或删除actionMenuBar的windowMenu选项

multithreading - 打开没有新线程的大型查询