Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speicherbedarf (GetProcessMemoryInfo) (https://www.delphipraxis.net/60818-speicherbedarf-getprocessmemoryinfo.html)

jaikai 12. Jan 2006 16:23


Speicherbedarf (GetProcessMemoryInfo)
 
Hi Leute,

habe meine Probleme mit dieser gefundenen (kaum modifizierten) Routine, die ich nur benötige um im eigenen Programm die Speicherfresser rauszufischen.

Das Hauptprogramm hat natürlich zahlreiche zusätzliche Formulare, die angezeigt werden.
Solange ich nur ein einziges Fenster (testprogramm zum checken) verwende, stimmen die Byte/kb-Zahlen. In meinem Hauptprogramm klafft der Wert um etwa Faktor 10 unter dem was der Windows-TaskManager mir ausspuckt!

Kann mir bitte jemand erklären, warum das so falsch berechnet wird? Und wie würde es richtiger lauten? Ich weiß nicht weiter

PROCESS_ALL_ACCESS ist austauschbar, aber die anderen bringen denselben Wert!



Delphi-Quellcode:
procedure TForm.Speicherbedarf(Parameter : string);
//  Parameter ist der zu notierende Kommentar-String ...
var
  pmc: PPROCESS_MEMORY_COUNTERS;
  cb: Integer;
  kb : integer;
//  s, s2, s3 : String; Für Listeneinträge
begin
  cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc, cb);
  pmc^.cb := cb;
  if GetProcessMemoryInfo(OpenProcess(PROCESS_ALL_ACCESS,false,
                          GetCurrentProcessId()), pmc, cb) then begin

    kb := pmc^.WorkingSetSize div 1024;

   // hau in ne Stringliste...

end;

Danke

Vjay 12. Jan 2006 16:28

Re: Speicherbedarf (GetProcessMemoryInfo)
 
Hallo,

kann ich dir zwar nicht sagen, dennoch solltest du wissen dass du die Handles, die OpenProcess zurückliefert auch wieder schließen mußt!
Oder du machst es so:
Delphi-Quellcode:
function getMyMemoryUsageInKb : integer;
var
  pmc: PPROCESS_MEMORY_COUNTERS;
  cb: Integer;
begin
 cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
 GetMem(pmc, cb);
 pmc^.cb := cb;
 if(GetProcessMemoryInfo(GetCurrentProcess, pmc, cb))then
   result := pmc^.WorkingSetSize div 1024
 else
   result := -1;
 FreeMem(pmc);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz