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

delphi – 如何衡量内存使用情况

发布时间:2020-12-15 09:12:05 所属栏目:大数据 来源:网络整理
导读:我正在使用Delphi 2009进行编码,我想知道程序使用了多少内存.由于内存管理器在释放对象时不会将未使用的内存释放回操作系统,因此它可能会在内存中缓存以供下次使用.我的问题是,是否有可能知道程序使用了多少内存.它应该排除内存管理器中缓存的内存.谢谢. 解
我正在使用Delphi 2009进行编码,我想知道程序使用了多少内存.由于内存管理器在释放对象时不会将未使用的内存释放回操作系统,因此它可能会在内存中缓存以供下次使用.我的问题是,是否有可能知道程序使用了多少内存.它应该排除内存管理器中缓存的内存.谢谢.

解决方法

我有一个例程,在调试模式下调用FastMM函数来获取内存(正如David建议的那样).当没有安装FastMM时,即在我的发布模式下,我使用以下代码,只需要参考Delphi的System单元:

function GetAllocatedMemoryBytes_NativeMemoryManager : NativeUInt;
// Get the size of all allocations from the memory manager
var
  MemoryManagerState: TMemoryManagerState;
  SmallBlockState: TSmallBlockTypeState;
  i: Integer;
begin
  GetMemoryManagerState( MemoryManagerState );
  Result := 0;
  for i := low(MemoryManagerState.SmallBlockTypeStates) to
        high(MemoryManagerState.SmallBlockTypeStates) do
    begin
    SmallBlockState := MemoryManagerState.SmallBlockTypeStates[i];
    Inc(Result,SmallBlockState.AllocatedBlockCount*SmallBlockState.UseableBlockSize);
    end;

  Inc(Result,MemoryManagerState.TotalAllocatedMediumBlockSize);
  Inc(Result,MemoryManagerState.TotalAllocatedLargeBlockSize);
end;

我使用XE2,因此您可能需要将NativeUInt更改为Int64.

(编辑:李大同)

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

    推荐文章
      热点阅读