gpt4 book ai didi

delphi - 如何获取Delphi程序使用的内存

转载 作者:行者123 更新时间:2023-12-03 14:32:38 26 4
gpt4 key购买 nike

我知道如何使用 GlobalMemoryStatusEx 获取系统内存使用情况,但这告诉我整个操作系统正在使用什么。

我真的希望我的程序报告它单独分配和正在使用多少内存。

在我的 Delphi 2009 程序中是否有任何方法可以调用 Windows 函数或某些 FastMM 函数来找出由我的程序单独分配的内存?

<小时/>

重新审视我的问题,我现在已将我接受的答案更改为 @apenwarr 的 GetMemoryManagerState 答案。它产生的结果与我以前使用的 GetHeapStatus 函数(现已弃用)相同,而 GetProcessMemoryInfo.WorkingSetSize 给出了非常不同的结果。

最佳答案

您可以从 Delphi 运行时获取有用的内存使用信息,而无需使用任何直接的 Win32 调用:

unit X;

uses FastMM4; //include this or method will return 0.
....

function GetMemoryUsed: UInt64;
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 - 如何获取Delphi程序使用的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/437683/

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