AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Speicherbedarf (GetProcessMemoryInfo)

Speicherbedarf (GetProcessMemoryInfo)

Ein Thema von jaikai · begonnen am 12. Jan 2006 · letzter Beitrag vom 12. Jan 2006
Antwort Antwort
jaikai

Registriert seit: 1. Jun 2005
70 Beiträge
 
#1

Speicherbedarf (GetProcessMemoryInfo)

  Alt 12. Jan 2006, 17:23
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...
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#2

Re: Speicherbedarf (GetProcessMemoryInfo)

  Alt 12. Jan 2006, 17:28
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;
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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