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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
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; |