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 Speicherauslastung einer Anwendung? (https://www.delphipraxis.net/27697-speicherauslastung-einer-anwendung.html)

Sharky 14. Aug 2004 09:42


Speicherauslastung einer Anwendung?
 
Hai,

wie kann ich den auslesen wieveil Speicher eine bestimmte Anwendung verwendet (So wie im Taskmanager angezeigt).
Wenn ich mit den diversen Codes aus dem Forum die ProzessID ermittele und dann den Speicherverbrauch dieses Prozesses auslese stimmt der Wet nicht einmal ansatzweise mit dem des Taskmanagers überein.
Hat da jemand einen Tipp für mich?

c113plpbr 14. Aug 2004 10:54

Re: Speicherauslastung einer Anwendung?
 
Es wäre interessant zu wissen wie du es denn bisher versucht hast?

Ich habe mal so ne Speicherauslastungsanzeige für mein programm gemacht, mit GetProcessMemoryInfo, und das hat eigentlich recht gut hingehauen, und immer gaanz genau den Wert gebracht, der im Taskmanger unter Speicherauslastung stand.

Ich habe diesen Code dafür verwendet:
Delphi-Quellcode:
function GetWorkingSetSize : 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;
(hab den code kurz nen bissl umgeschrieben, sollte funzen ...)
Der Code stammt aber ursprünglich auch aus der DP, wenn ich mich nicht irre ...

Für diese Funktion brauchst du aber ein Handle zum Prozess, d.h. dass du per OpenProcess dir eines holen musst ...

ciao, Philipp

Sharky 14. Aug 2004 10:59

Re: Speicherauslastung einer Anwendung?
 
Zitat:

Zitat von c113plpbr
...Für diese Funktion brauchst du aber ein Handle zum Prozess, d.h. dass du per OpenProcess dir eines holen musst ...

Hai Philipp,
diesen Code verwende ich auch. Aber ich dachte ich bräuchte dafür die ProzessID und nicht den Handle. Also liegt wohl dort mein Fehler?

c113plpbr 14. Aug 2004 11:05

Re: Speicherauslastung einer Anwendung?
 
MSDN Platform SDK
GetProcessMemoryInfo
Parameters:
Process: [in] Handle to the process.
ppsmemCounters: [out] Pointer to the PROCESS_MEMORY_COUNTERS structure that receives information about the memory usage of the process.
cb: [in] Specifies the size, in bytes, of the PROCESS_MEMORY_COUNTERS structure.


Dann versuch mal den prozess per
Delphi-Quellcode:
OpenProcess(PROCESS_ALL_ACCESS,false,PID)
zu öffnen.

ciao, Philipp

Sharky 14. Aug 2004 11:11

Re: Speicherauslastung einer Anwendung?
 
Zitat:

Zitat von c113plpbr
...Dann versuch mal den prozess per
Delphi-Quellcode:
OpenProcess(PROCESS_ALL_ACCESS,false,PID)
zu öffnen....

Bingo :bounce1:
jetzt geht es. Ich danke Dir.

Der_Ventilator 6. Jul 2006 18:23

Re: Speicherauslastung einer Anwendung?
 
Welche Units muss ich da noch einbinden?
Mein D2005 PE kennt ja nicht mal die Datentypen, da ist eigentlich alles als unbekannt rot unterschlängelt...

Christian Seehase 6. Jul 2006 20:27

Re: Speicherauslastung einer Anwendung?
 
Moin Ventilator,

dafür benötigst Du noch die Unit psapi.

angos 27. Jan 2011 09:59

AW: Re: Speicherauslastung einer Anwendung?
 
Zitat:

Zitat von Sharky (Beitrag 191217)
Zitat:

Zitat von c113plpbr
...Dann versuch mal den prozess per
Delphi-Quellcode:
OpenProcess(PROCESS_ALL_ACCESS,false,PID)
zu öffnen....

Bingo :bounce1:
jetzt geht es. Ich danke Dir.


Hi,

ich habe genau das gleiche Problem wie du, Sharky. Leider ist mir nicht bewusst wo ich die hier angegebene Zeile einsetzen muss. Kann mir dort jemand weiter helfen?

EDIT: Würde ebenfalls gern wissen wo ich die PID herbekomme!

Also wo muss das eingebaut werden..schön wäre auch noch eine Erklärung damit ich nicht ganz dumm sterbe :)

Gruß

himitsu 27. Jan 2011 10:49

AW: Speicherauslastung einer Anwendung?
 
Da wo ganz oben mit GetCurrentProcess der die eigene Anwendung übergeben wird, kannst du das Handle irgendeiner Anwendung übergeben, welches man sich z.B. auch über MSDN-Library durchsuchenOpenProcess besorgen kann, wenn es um eine fremde Anwendung geht.

Hier im Forum suchenProzesse auflisten (ansonsten "neue Frage neuer Thread")


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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