delphi 显示程序占用内存多少


本文整理自网络,侵删。

 
方法一: 要加单元 PsAPI
procedure TForm1.tmr1Timer(Sender: TObject);
begin
 edt1.Text:= format('memory use: %d KB', [GetProcessMemUse(GetCurrentProcessId)]);//方法一
end;
 
function TForm1.GetProcessMemUse(PID: Cardinal): Cardinal;    //方法一
var
pmc: PPROCESS_MEMORY_COUNTERS; //uses psApi
ProcHandle: HWND;
iSize: DWORD;
begin
  Result := 0;
  iSize := SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc, iSize);
  try
    pmc^.cb := iSize;
    ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
    False, PID); //由PID取得进程对象的句柄
    if GetProcessMemoryInfo(ProcHandle, pmc, iSize) then
    Result := pmc^.WorkingSetSize;
    Result :=Result div 1024;
  finally
    FreeMem(pmc);
  end;
end;
 
//*********************************************
 
方法二:要加单元 PsAPI, Tlhelp32;
procedure TForm1.tmr1Timer(Sender: TObject);
var
 str,str2:string;
begin
 if (GetProcessMemorySize('proj1.exe',str,str2)) then    //方法二 参数要写程序名,不好
  begin
    edt2.Text :='当前内存使用:'+ str +'KB';
  end;
end;
function TForm1.GetProcessMemorySize(ProcessName: string; var Size,    //方法二
  PN: string): Boolean;
var
pProcess:THandle;
MemSize,t:Integer;
hProcSnap:THandle;
PPMCSize:Cardinal;
pe32:TProcessEntry32;
PPMC:PPROCESS_MEMORY_COUNTERS;
begin
 
  PPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
  GetMem(PPMC, PPMCSize);
  PPMC^.cb:= PPMCSize;
 
  hProcSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,  0);
  if  hProcSnap=INVALID_HANDLE_VALUE  then  Exit;
  pe32.dwSize:=SizeOf(ProcessEntry32);
  if  Process32First(hProcSnap,pe32)=True then
      while  Process32Next(hProcSnap,pe32)=True  do
      begin
          if uppercase(pe32.szExeFile)=uppercase(ProcessName) then
          begin
            pProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE, pe32.th32ProcessID);
 
            if (GetProcessMemoryInfo(pProcess,PPMC,PPMCSize)) then
             begin
               MemSize:=PPMC^.WorkingSetSize div 1024;
               t:= Length(IntToStr(MemSize))-2;
               Size:=IntToStr(MemSize);
               Insert(',',Size,t);
               PN:=ProcessName;
               FreeMem(PPMC);
               Result:=True;
             end
            else
             begin
               FreeMem(PPMC);
               Result:=False;
             end;
 
          end;
      end;
  CloseHandle(pProcess);
  CloseHandle(hProcSnap);
end;

相关阅读 >>

Delphi中exit,abort,break,continue的区别介绍

Delphi setlength 内存释放总结

Delphi 文件夹拷贝子文件及文件夹

Delphi firemonkey在画布上绘制 imagelist图像

Delphi 10.3版本获取windows系统版本和cpu信息

Delphi xe 的 tdictionary

Delphi 批量多个字符串合并一个txt文件

Delphi 改造shellexecute 精简函数

winapi 字符及字符串函数(12): lstrlen - 串长度

Delphi xe5 android实现繁体字到简体字的转换函数

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...