我知道如何使用GlobalMemoryStatusEx获取系统内存使用,但这告诉我整个操作系统是什么。
我真的希望我的程序报告多少内存,它单独已分配和正在使用。
在我的Delphi 2009程序中有什么办法调用一个Windows函数或者一些FastMM函数来查找已经由我的程序分配的内存?
重新访问我的问题,我现在改变了我接受的答案GetMemoryManagerState答案@apenwarr。它产生与我过去使用的GetHeapStatus函数(现在已弃用)相同的结果,而GetProcessMemoryInfo.WorkingSetSize给出了非常不同的结果。
解决方法
你可以从Delphi运行时获得有用的内存使用信息,而不使用任何直接的Win32调用:
function MemoryUsed: cardinal; var st: TMemoryManagerState; sb: TSmallBlockTypeState; begin GetMemoryManagerState(st); result := st.TotalAllocatedMediumBlockSize + st.TotalAllocatedLargeBlockSize; for sb in st.SmallBlockTypeStates do begin result := result + sb.UseableBlockSize * sb.AllocatedBlockCount; end; end;
这种方法的最好的事情是它被严格跟踪:当你分配内存,它上升,当你释放内存,它立即下降相同的数额。我在运行我的每个单元测试之前和之后使用这个,所以我可以告诉哪个测试是泄漏的内存(例如)。