加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 05:25:03 所属栏目:大数据 来源:网络整理
导读:我知道如何使用GlobalMemoryStatusEx获取系统内存使用,但这告诉我整个操作系统是什么。 我真的希望我的程序报告多少内存,它单独已分配和正在使用。 在我的Delphi 2009程序中有什么办法调用一个Windows函数或者一些FastMM函数来查找已经由我的程序分配的内
我知道如何使用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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读