gpt4 book ai didi

delphi - 如何解释 FastMM 或 GetProcessMemoryInfo 报告的内存使用情况的差异?

转载 作者:行者123 更新时间:2023-12-03 15:50:45 35 4
gpt4 key购买 nike

我的 Delphi XE 应用程序基于单个 EXE,使用由 RemObjects 创建的本地服务器 DLL,并使用大量内存进行特定操作,直到生成一个异常,指出内存不足。因此,我试图了解发生这种情况的原因和位置,因此我在代码中放置了各种步骤来报告内存使用情况。问题是,根据用于获取内存使用信息的方法,我得到的信息非常不同:

  1. 如果我使用方法 explained here它直接向 FastMM 询问客户端 EXE 和服务器 DLL,这是我得到的:

    • 第 1 步:[客户端] = 36664572 - [服务器] = 3274976
    • 第 2 步:[客户端] = 62641230 - [服务器] = 44430224
    • 第 3 步:[客户端] = 66665630 - [服务器] = 44430224
  2. 现在如果我使用方法explained here它使用 GetProcessMemoryInfo,我得到更多的内存使用量:

    • 第 1 步:[进程] = 133722112
    • 第 2 步:[进程] = 1072115712
    • 第 3 步:[进程] = 1075818496

根据我的内存问题,第二种方法似乎是正确的,但 FastMM 方法怎么会这么“低”?什么可以解释这种差异?

最佳答案

GetProcessMemoryInfo 还报告不受 FastMM 管理的内存,例如由您可能调用的各种非 Delphi dll(例如 winapi)分配的内存。

FastMM 还可以从 Windows 分配更多内存,供您的应用程序实际用于内部结构、碎片和池化。

最后,使用 GetProcessMemoryInfo 测量工作集大小。这就是应用程序内存当前位于 RAM 中而不是页面文件中的部分。它不仅仅包括数据结构,而且绝对无法与应用程序分配的总内存相比较。 PagefileUsage 会更具可比性。工作集大小几乎从来都不是您想要的。请参阅here为了更好的解释。

所以它们都会给出不同的结果,因为它们都测量不同的东西。

关于delphi - 如何解释 FastMM 或 GetProcessMemoryInfo 报告的内存使用情况的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704786/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com