如何获得由Delphi程序使用的内存

前端之家收集整理的这篇文章主要介绍了如何获得由Delphi程序使用的内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道如何使用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;

这种方法的最好的事情是它被严格跟踪:当你分配内存,它上升,当你释放内存,它立即下降相同的数额。我在运行我的每个单元测试之前和之后使用这个,所以我可以告诉哪个测试是泄漏的内存(例如)。

猜你在找的Delphi相关文章