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

windows – 使用delphi确定进程虚拟大小

发布时间:2020-12-14 04:20:49 所属栏目:Windows 来源:网络整理
导读:我有一个Delphi程序,我正在研究这个程序如何在日志文件中打印自己的“虚拟大
我有一个Delphi程序,我正在研究这个程序如何在日志文件中打印自己的“虚拟大小”,以便我可以看到它何时使用了太多内存.如何使用Delphi代码确定“虚拟大小”?

“虚拟大小”是指Process Explorer显示的值.普通任务管理器无法显示该值.它不是程序的内存使用,而是地址空间的使用.在Win32上,程序不能使用超过2 GB的地址空间.

PS:我使用的是Delphi 6,但其他版本的代码/信息也应该没问题.

由于这个 post给出了如何使用C/C++获取虚拟大小的提示,我能够编写以下Delphi函数:
Type
  TMemoryStatusEx = packed record
    dwLength: DWORD;
    dwMemoryLoad: DWORD;
    ullTotalPhys: Int64;
    ullAvailPhys: Int64;
    ullTotalPageFile: Int64;
    ullAvailPageFile: Int64;
    ullTotalVirtual: Int64;
    ullAvailVirtual: Int64;
    ullAvailExtendedVirtual: Int64;
  end;
  TGlobalMemoryStatusEx = function(var MSE: TMemoryStatusEx): LongBool; stdcall;

function VirtualSizeUsage: Int64;
var MSE: TMemoryStatusEx;
    fnGlobalMemoryStatusEx: TGlobalMemoryStatusEx;
begin
  Result := 0;
  @fnGlobalMemoryStatusEx := GetProcAddress(GetModuleHandle(kernel32),'GlobalMemoryStatusEx');
  if Assigned(@fnGlobalMemoryStatusEx) then
  begin
    MSE.dwLength := SizeOf(MSE);
    if fnGlobalMemoryStatusEx(MSE) then
      Result := MSE.ullTotalVirtual-MSE.ullAvailVirtual;
  end;
end;

它似乎对我很有用(Delphi 6,Win XP).使用GlobalMemoryStatus而不是GlobalMemoryStatusEx可能有一个更简单的解决方案,但它在内存超过2 GB的系统上无法正常工作.

(编辑:李大同)

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

    推荐文章
      热点阅读