delphi 显示程序占用内存多少  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

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;

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.10473299026489 seconds