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
Wenn die Programme das machen, wie's wir machen, wären sie unbrauchbar...