Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

TIP [DELPHI] – Memoria occupata dall’applicazione in esecuzione

Digital Innovation Partner

TIP [DELPHI] – Memoria occupata dall’applicazione in esecuzione

Capita di creare applicazioni che fanno un uso intensivo della memoria, per poter calibrare alcuni processi all’interno dell’applicazione potrebbe essere conveniente conoscere l’impegno di memoria di quest’ultima, per fare ciò riporto di seguito un piccolo esempio :

Leggere la quantità di memoria occupata dalla ns applicazione da codice

{$R *.dfm}
uses psAPI;

function GetProcessMemorySize(var _nMemSize: Cardinal): Boolean;
var
l_nWndHandle, l_nProcID, l_nTmpHandle: HWND;
l_pPMC: PPROCESS_MEMORY_COUNTERS;
l_pPMCSize: Cardinal;
begin
// Permette di ricavere l’hadle dal nome del processo
// l_nWndHandle := FindWindow(nil, PChar(_sProcessName));

// In questo caso imposto l’handle alla ns applicazione
l_nWndHandle := Application.Handle;

if l_nWndHandle = 0 then
begin
Result := False;
Exit;
end;

l_pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);

GetMem(l_pPMC, l_pPMCSize);
l_pPMC^.cb := l_pPMCSize;

GetWindowThreadProcessId(l_nWndHandle, @l_nProcID);
l_nTmpHandle := OpenProcess(PROCESS_ALL_ACCESS, False, l_nProcID);

if (GetProcessMemoryInfo(l_nTmpHandle, l_pPMC, l_pPMCSize)) then
_nMemSize := l_pPMC^.WorkingSetSize
else
_nMemSize := 0;

FreeMem(l_pPMC);

Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
l_nSize: Cardinal;
begin
if (GetProcessMemorySize(l_nSize)) then
ShowMessage(‘Size: ‘ + IntToStr(l_nSize) + ‘ byte’)
else
ShowMessage(‘Error’);
end;

Lascia un commento