我的Delphi XE应用程序基于一个使用RemObjects创建的本地服务器DLL的EXE,并使用大量内存进行特定操作,直到它生成一个异常,说明内存不足。所以我试图理解为什么以及在哪里发生这种情况所以我在我的代码中放置了各种步骤来报告内存使用情况。问题是我根据获取内存使用信息的方法获得了非常不同的信息:
如果我使用方法explained here直接向FastMM请求客户端EXE和服务器DLL,这就是我得到的:
现在,如果我使用使用GetProcessMemoryInfo的方法explained here,我会获得更多的内存使用量:
看起来第二种方法是基于我的记忆问题的权利,但FastMM方法怎么可能如此“低”?什么可以解释这种差异?
答案 0 :(得分:5)
GetProcessMemoryInfo还报告不由FastMM管理的内存,例如由您可能调用的各种非Delphi dll(如winapi)分配的内存。
此外,FastMM可以从Windows分配更多内存,您的应用程序实际用于内部结构,碎片和池。
最后,使用GetProcessMemoryInfo测量工作集大小。这就是应用程序内存中的一部分,而不是在页面文件中的RAM中。它不仅包括数据结构,而且绝对不能与应用程序分配的总内存相比。 PagefileUsage会更具可比性。工作集大小几乎从来都不是你想要的。有关更好的说明,请参阅here。
所以他们都给出了不同的结果,因为它们都衡量不同的东西。