![]() |
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 |
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 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz